Mercurial > mm7
diff Arcomage.cpp @ 1282:8a196c858180
Слияние
author | Ritor1 |
---|---|
date | Sat, 15 Jun 2013 09:55:27 +0600 |
parents | 6bc88137a019 |
children | dcc52e17b517 |
line wrap: on
line diff
--- a/Arcomage.cpp Sat Jun 15 09:55:07 2013 +0600 +++ b/Arcomage.cpp Sat Jun 15 09:55:27 2013 +0600 @@ -5,7 +5,7 @@ #include <string> #include <assert.h> -#include "LightmapBuilder.h" +#include "Render.h" #include "Arcomage.h" #include "VideoPlayer.h" #include "AudioPlayer.h" @@ -20,41 +20,41 @@ #include "VectorTypes.h" #include "texts.h" #include <windef.h> +#include "mm7_data.h" void SetStartConditions(); - - void SetStartGameData(); void FillPlayerDeck(); void InitalHandsFill(); void GetNextCardFromDeck(int player_num); int GetEmptyCardSlotIndex(int player_num); void IncreaseResourcesInTurn(int player_num); -void __cdecl am_40A383(); -bool IsGameOver(); -char __thiscall am_40A560(unsigned int _this); -void DrawGameUI(int a1); // idb -void am_40AA4E(); +void TurnChange(); +bool IsGameOver(); +int CalculateCardPower(ArcomagePlayer* player, ArcomagePlayer* enemy, ArcomageCard* pCard, int mastery); +char PlayerTurn(int player_num); +void DrawGameUI(int animation_stage); +void DrawSparks(); void DrawRectanglesForText(); void DrawPlayersText(); -void DrawPlayerLevels(int a1, char *text, POINT *pXY); // idb -void DrawBricksCount(int a1, char* text, POINT *pXY); // idb +void DrawPlayerLevels(int a1, char *text, POINT *pXY); +void DrawBricksCount(int a1, char* text, POINT *pXY); void DrawGemsCount(int a1, char* text, POINT* pXY); -void DrawBeastsCount(int a1, char *text, POINT *pXY); // idb +void DrawBeastsCount(int a1, char *text, POINT *pXY); void DrawPlayersTowers(); void DrawPlayersWall(); void DrawCards(); void DrawCardAnimation(int a1); int GetPlayerHandCardCount(int player_num); signed int DrawCardsRectangles(int player_num); -bool am_40BCFB(int player_num, signed int card_slot_index); +bool DiscardCard(int player_num, signed int card_slot_index); bool PlayCard(int player_num, signed int card_slot_num); bool CanCardBePlayed(int player_num, int hand_card_indx); -void ApplyCardToPlayer(int player_num, unsigned int uCardID); // idb +void ApplyCardToPlayer(int player_num, unsigned int uCardID); 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); @@ -62,9 +62,10 @@ void __fastcall Blt_Chroma(RECT *pSrcXYZW, POINT *pTargetXY, int a3, int a4); void Blt_Copy(RECT *pSrcRect, POINT *pTargetXY, int a3); void __cdecl am_EndScene(); -void __fastcall DrawRect(RECT *pXYZW, unsigned __int16 uColor, char bSolidFill); // idb -void SetPixel(POINT *pTargetXY, unsigned __int16 uColor); -int __fastcall rand_interval(int a, int b); // idb +void DrawRect(RECT *pXYZW, unsigned __int16 uColor, char bSolidFill); +void SetPixel2sq( POINT *pTargetXY, unsigned __int16 uColor ); +void SetPixel(POINT *pTargetXY, unsigned __int16 uColor); +int rand_interval(int min, int max); // idb void __fastcall intToString(int val, char *pOut); /* 388 */ @@ -81,10 +82,10 @@ __int16 bricks_amount; __int16 gems_amount; __int16 beasts_amount; - int field_14; + int mastery_lvl; }; #pragma pack(pop) -ArcomageStartConditions start_conditions[13] = +const ArcomageStartConditions start_conditions[13] = { { 30, 100, 15, 5, 2, 2, 2, 10, 10, 10, 0}, { 50, 150, 20, 5, 2, 2, 2, 5, 5, 5, 1}, @@ -127,17 +128,28 @@ int x; int y; - char field_8; - char field_9; - char field_A; - char field_B; + char curr_mouse_left; + char mouse_left_state_changed; + char curr_mouse_right; + char mouse_right_state_changed; }; #pragma pack(pop) +#pragma pack(push, 1) +struct am_2 + { + int slot_index; + int card_power; + }; +#pragma pack(pop) + +am_2 cards_power[10]; +std::array<__int16, 12> am_sounds; + char byte_4E185C = 1; // weak char am_byte_4E185D = 1; // weak -char byte_4E185E = 1; // weak +char use_start_bonus = 1; // weak int start_tower_height; int start_wall_height; @@ -154,13 +166,13 @@ int max_tower_height = 50; int max_resources_amount = 100 ; -int dword_4DF3A4; // weak +int opponent_mastery = 1 ; // weak char byte_4FAA2C; // weak char byte_4FAA2D; // weak int current_player_num; // idb -char am_byte_4FAA77; // weak +char need_to_discard_card; // weak signed int current_card_slot_index; int played_card_id; // idb 4FABC0 @@ -177,10 +189,29 @@ POINT amuint_4FAA54_blt_xy; POINT amuint_4FAA5C_blt_xy; - +int dword_4FAA64; // weak +int dword_4FAA68; // weak int dword_4FABB8; // weak +char byte_4FAA00; // weak + +int amuint_4FAA34; // weak +int amuint_4FAA38; // weak +int amuint_4FAA4C; // weak + +char byte_4FAA2E; // weak + +int dword_4FAA70; // weak +char byte_4FAA74; // weak +char am_byte_4FAA75; // weak +char am_byte_4FAA76; // weak + +int amuint_4FABC4; // weak + + +char byte_505880; // weak +char byte_505881; // weak //----- (0040DD2F) -------------------------------------------------------- bool stru273::_40DD2F() @@ -188,12 +219,12 @@ this->x = pArcomageGame->mouse_x; this->y = pArcomageGame->mouse_y; - this->field_8 = pArcomageGame->mouse_left; - this->field_9 = pArcomageGame->mouse_left == pArcomageGame->field_F7; - this->field_A = pArcomageGame->mouse_right; - this->field_B = pArcomageGame->mouse_right == pArcomageGame->field_F8; - pArcomageGame->field_F7 = pArcomageGame->mouse_left; - pArcomageGame->field_F8 = pArcomageGame->mouse_right; + this->curr_mouse_left = pArcomageGame->mouse_left; + this->mouse_left_state_changed = pArcomageGame->mouse_left == pArcomageGame->prev_mouse_left; + this->curr_mouse_right = pArcomageGame->mouse_right; + this->mouse_right_state_changed = pArcomageGame->mouse_right == pArcomageGame->prev_mouse_right; + pArcomageGame->prev_mouse_left = pArcomageGame->mouse_left; + pArcomageGame->prev_mouse_right = pArcomageGame->mouse_right; return true; } @@ -206,13 +237,13 @@ } //----- (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->position_in_sparks_arr = 0; v2->field_30 = 0.0; v2->field_58 = 0; v2->field_59 = 0; @@ -234,16 +265,16 @@ } //----- (0040E01A) -------------------------------------------------------- -int stru272_stru0::_40E01A( stru272_stru2* a2 ) +int stru272_stru0::StartFill( stru272_stru2* a2 ) { auto a1 = this; if ( a1->signature == SIG_trpg ) { a1->field_4 = a2->field_20; - a1->field_C = a2->field_0 << 16; - a1->field_10 = a2->field_4 << 16; - a1->field_14 = a2->field_8 << 16; - a1->field_18 = a2->field_C << 16; + a1->field_C = a2->effect_area.left << 16; + a1->field_10 = a2->effect_area.top << 16; + a1->field_14 = a2->effect_area.right << 16; + a1->field_18 = a2->effect_area.bottom << 16; a1->field_1C = a2->field_10; a1->field_20 = a2->field_14; a1->field_24 = a2->field_18; @@ -253,7 +284,7 @@ a1->field_38 = (int)(a2->field_2Cf * 65536.0); a1->field_3C = a2->field_30; a1->field_40 = a2->field_34; - a1->field_54 = a2->field_38; + a1->field_54 = a2->sparks_array; a1->field_59 = 1; return 0; @@ -269,14 +300,14 @@ { if ( a2 ) { - field_8 = 0; + position_in_sparks_arr = 0; field_30 = 0.0; } if ( field_59 && a3 ) { for (int i=0; i<field_4; ++i) - field_54[i].field_0 = 0; + field_54[i].have_spark = 0; field_58 = 0; } return 0; @@ -286,7 +317,7 @@ } //----- (0040E133) -------------------------------------------------------- -int stru272_stru0::_40E133() +int stru272_stru0::DrawEffect() { stru272_stru0 *v1; // edi@1 @@ -314,7 +345,7 @@ v1 = this; if ( this->signature != SIG_trpg ) return 2; - v3 = this->field_8; + v3 = this->position_in_sparks_arr; v22 = this->field_30; v4 = v3; if ( v3 > 0 ) @@ -330,28 +361,29 @@ v7 = this->field_54; v20 = this->field_28; v21 = this->field_4; - while ( v7->field_0 <= 0 ) + while ( v7->have_spark <= 0 ) { if ( v22 >= 1.0 ) { v12 = v1->field_40; v13 = v1->field_3C; - v7->field_0 = v13 + rand() % (v12 - v13 + 1); + v7->have_spark = rand_interval(v13,v12); v7->field_14 = (rand() % 17 - 8) << 16; v7->field_18 = (rand() % 17 - 8) << 16; + v14 = v1->field_14 - 1; v15 = v1->field_C; - v16 = v15 + rand() % (v14 - v15 + 1); + v16 = rand_interval(v15,v14); v7->field_C = v16; - v7->field_4.x = v16 >> 16; + v7->spark_position.x = v16 >> 16; v17 = v1->field_18 - 1; v18 = v1->field_10; - v22 = v22 - 1.0; - v19 = v18 + rand() % (v17 - v18 + 1); + v19 = rand_interval(v17, v18); v7->field_10 = v19; - v7->field_4.y = v19 >> 16; - --v1->field_8; + v7->spark_position.y = v19 >> 16; + --v1->position_in_sparks_arr; + v22 = v22 - 1.0; goto LABEL_13; } LABEL_14: @@ -365,17 +397,17 @@ } } v8 = v7->field_14; - --v7->field_0; + --v7->have_spark; v9 = v8 + v7->field_C; v10 = v20 + v7->field_18; v7->field_C = v9; - v7->field_4.x = v9 >> 16; + v7->spark_position.x = v9 >> 16; v11 = v10 + v7->field_10; v7->field_18 = v10; v7->field_10 = v11; - v7->field_4.y = v11 >> 16; + v7->spark_position.y = v11 >> 16; LABEL_13: v6 = 1; goto LABEL_14; @@ -389,7 +421,7 @@ if (signature == SIG_trpg ) { - if ( field_8 <= 0 ) + if ( position_in_sparks_arr <= 0 ) return field_58 != 0 ? 2 : 0; else return 1; @@ -427,9 +459,9 @@ pTargetPoint.x = 0; pTargetPoint.y = 0; - pSrcRect.left = 0; - pSrcRect.right = 640; - pSrcRect.top = 0; + pSrcRect.left = 0; + pSrcRect.top = 0; + pSrcRect.right = 640; pSrcRect.bottom = 480; pRenderer->BeginScene(); @@ -757,793 +789,441 @@ return true; } +int CalculateCardPower(ArcomagePlayer* player, ArcomagePlayer* enemy, ArcomageCard* pCard, int mastery) + { + enum V_INDX{ + P_TOWER_M10, + P_WALL_M10, + E_TOWER, + E_WALL, + E_BUILDINGS, + E_QUARRY, + E_MAGIC, + E_ZOO, + E_RES, + V_INDEX_MAX + }; + + const int mastery_coeff[V_INDEX_MAX][2]= {{10, 5}, //P_TOWER_M10 + {2, 1}, //P_WALL_M10 + {1, 10}, //E_TOWER + {1, 3}, //E_WALL + {1, 7}, //E_BUILDINGS + {1, 5}, //E_QUARRY + {1, 40}, //E_MAGIC + {1, 40}, //E_ZOO + {1, 2} //E_RES + }; + int card_power= 0; + int element_power; + + + if ( pCard->to_player_tower == 99 || pCard->to_pl_enm_tower == 99|| + pCard->to_player_tower2 == 99 || pCard->to_pl_enm_tower2 == 99 ) + element_power = enemy->tower_height - player->tower_height; + else + element_power = pCard->to_player_tower + pCard->to_pl_enm_tower + pCard->to_player_tower2 + pCard->to_pl_enm_tower2; + + if ( player->tower_height >= 10 ) + card_power += mastery_coeff[P_TOWER_M10][mastery]*element_power; + else + card_power += 20*element_power; + + + if ( pCard->to_player_wall == 99 || pCard->to_pl_enm_wall == 99 || + pCard->to_player_wall2 == 99 || pCard->to_pl_enm_wall2 == 99 ) + element_power = enemy->wall_height - player->wall_height; + else + element_power = pCard->to_player_wall + pCard->to_pl_enm_wall + + pCard->to_player_wall2 + pCard->to_pl_enm_wall2; + if ( player->wall_height >= 10 ) + card_power += mastery_coeff[P_WALL_M10][mastery]*element_power; //1 + else + card_power += 5*element_power; + + + card_power += 7 * (pCard->to_player_buildings + pCard->to_pl_enm_buildings + + pCard->to_player_buildings2 + pCard->to_pl_enm_buildings2); + + if ( pCard->to_player_quarry_lvl == 99 || pCard->to_pl_enm_quarry_lvl == 99 || + pCard->to_player_quarry_lvl2 == 99 || pCard->to_pl_enm_quarry_lvl2 == 99 ) + element_power = enemy->quarry_level - player->quarry_level; + else + element_power = pCard->to_player_quarry_lvl + pCard->to_pl_enm_quarry_lvl + + pCard->to_player_quarry_lvl2 + pCard->to_pl_enm_quarry_lvl; + + card_power += 40 * element_power; + + if ( pCard->to_player_magic_lvl == 99 || pCard->to_pl_enm_magic_lvl == 99 || + pCard->to_player_magic_lvl2 == 99 || pCard->to_pl_enm_magic_lvl2 == 99 ) + element_power = enemy->magic_level - player->magic_level; + else + element_power = pCard->to_player_magic_lvl + pCard->to_pl_enm_magic_lvl + + pCard->to_player_magic_lvl2 + pCard->to_pl_enm_magic_lvl2; + card_power += 40 *element_power; + + if ( pCard->to_player_zoo_lvl == 99 || pCard->to_pl_enm_zoo_lvl == 99 || + pCard->to_player_zoo_lvl2 == 99 || pCard->to_pl_enm_zoo_lvl2 == 99 ) + element_power = enemy->zoo_level - player->zoo_level; + else + element_power = pCard->to_player_zoo_lvl + pCard->to_pl_enm_zoo_lvl + + pCard->to_player_zoo_lvl2 + pCard->to_pl_enm_zoo_lvl2; + card_power += 40 *element_power; + + if ( pCard->to_player_bricks == 99 || pCard->to_pl_enm_bricks == 99 || + pCard->to_player_bricks2 == 99 || pCard->to_pl_enm_bricks2 == 99 ) + element_power = enemy->resource_bricks - player->resource_bricks; + else + element_power = pCard->to_player_bricks + pCard->to_pl_enm_bricks + + pCard->to_player_bricks2 + pCard->to_pl_enm_bricks2; + card_power += 2 *element_power; + + + if ( pCard->to_player_gems == 99 || pCard->to_pl_enm_gems == 99 || + pCard->to_player_gems2 == 99 || pCard->to_pl_enm_gems2 == 99 ) + element_power = enemy->resource_gems - player->resource_gems; + else + element_power = pCard->to_player_gems + pCard->to_pl_enm_gems + + pCard->to_player_gems2 + pCard->to_pl_enm_gems2; + card_power += 2 *element_power; + + if ( pCard->to_player_beasts == 99 || pCard->to_pl_enm_beasts == 99 || + pCard->to_player_beasts2 == 99 || pCard->to_pl_enm_beasts2 == 99 ) + element_power = enemy->resource_beasts - player->resource_beasts; + else + element_power = pCard->to_player_beasts + pCard->to_pl_enm_beasts + + pCard->to_player_beasts2 + pCard->to_pl_enm_beasts2; + card_power += 2 *element_power; + + if ( pCard->to_enemy_tower == 99 || pCard->to_enemy_tower2 == 99 ) + element_power = player->tower_height - enemy->tower_height; + else + element_power = -(pCard->to_enemy_tower + pCard->to_enemy_tower2); + card_power += mastery_coeff[E_TOWER][mastery]*element_power; + + if ( pCard->to_enemy_wall == 99 || pCard->to_enemy_wall2 == 99 ) + element_power = player->wall_height - enemy->wall_height; + else + element_power = -(pCard->to_enemy_wall + pCard->to_enemy_wall2); + card_power += mastery_coeff[E_WALL][mastery]*element_power; + + card_power -= mastery_coeff[E_BUILDINGS][mastery]*(pCard->to_enemy_buildings + pCard->to_enemy_buildings2); + + if ( pCard->to_enemy_quarry_lvl == 99 || pCard->to_enemy_quarry_lvl2 == 99 ) + element_power = player->quarry_level - enemy->quarry_level; //5 + else + element_power = -(pCard->to_enemy_quarry_lvl + pCard->to_enemy_quarry_lvl2); //5 + card_power += mastery_coeff[E_QUARRY][mastery]*element_power; + + if ( pCard->to_enemy_magic_lvl == 99 || pCard->to_enemy_magic_lvl2 == 99 ) + element_power = player->magic_level - enemy->magic_level; //40 + else + element_power = -(pCard->to_enemy_magic_lvl + pCard->to_enemy_magic_lvl2); + card_power += mastery_coeff[E_MAGIC][mastery]*element_power; + + if ( pCard->to_enemy_zoo_lvl == 99 || pCard->to_enemy_zoo_lvl2 == 99 ) + element_power = player->zoo_level - enemy->zoo_level; //40 + else + element_power = -(pCard->to_enemy_zoo_lvl + pCard->to_enemy_zoo_lvl2); + card_power += mastery_coeff[E_ZOO][mastery]*element_power; + + if ( pCard->to_enemy_bricks == 99 || pCard->to_enemy_bricks2 == 99 ) + element_power = player->resource_bricks - enemy->resource_bricks; //2 + else + element_power = -(pCard->to_enemy_bricks + pCard->to_enemy_bricks2); + card_power += mastery_coeff[E_RES][mastery]*element_power; + + if ( pCard->to_enemy_gems == 99 || pCard->to_enemy_gems2 == 99 ) + element_power = player->resource_gems - enemy->resource_gems; //2 + else + element_power = -(pCard->to_enemy_gems + pCard->to_enemy_gems2); + card_power += mastery_coeff[E_RES][mastery]*element_power; + + if ( pCard->to_enemy_beasts == 99 || pCard->to_enemy_beasts2 == 99 ) + element_power = player->resource_beasts - enemy->resource_beasts; //2 + else + element_power = -(pCard->to_enemy_beasts + pCard->to_enemy_beasts2); + card_power += mastery_coeff[E_RES][mastery]*element_power; + + if ( pCard->field_30 || pCard->field_4D ) + card_power *= 10; + + if ( pCard->field_24 == 1 ) + element_power = player->resource_bricks - pCard->needed_bricks; + else if ( pCard->field_24 == 2 ) + element_power = player->resource_gems - pCard->needed_gems; + else if (pCard->field_24 == 3) + element_power = player->resource_beasts - pCard->needed_beasts; + if ( element_power > 3 ) + element_power = 3; + card_power += 5 * element_power; + + if ( enemy->tower_height <= pCard->to_enemy_tower2 + pCard->to_enemy_tower ) + card_power += 9999; + + if (pCard->to_enemy_tower2 + pCard->to_enemy_tower + + pCard->to_enemy_wall + pCard->to_enemy_wall2 + + pCard->to_enemy_buildings + pCard->to_enemy_buildings2 >= enemy->wall_height + enemy->tower_height) + card_power += 9999; + + if ( (pCard->to_player_tower2 + pCard->to_pl_enm_tower2 + + pCard->to_player_tower + pCard->to_pl_enm_tower + player->tower_height) >= max_tower_height ) + card_power += 9999; + + return card_power; + } + + //----- (00408BB4) -------------------------------------------------------- -bool __fastcall am_408BB4(int a1) +bool OpponentsAITurn(int player_num) { -// char result; // al@3 -// signed int v3; // ebx@8 -// int v4; // esi@8 -// int v5; // eax@9 -// int v6; // edi@9 -// int v7; // eax@11 -// signed int v8; // eax@11 -// int v9; // ebx@5 -// int v10; // eax@5 -// int v11; // ecx@18 -// char v12; // bl@20 -// int v13; // eax@20 -// ArcomageCard *v14; // ecx@20 -// char v15; // dl@20 -// char v16; // dl@24 -// int v17; // edx@25 -// int v18; // edx@27 -// char v19; // dl@31 -// int v20; // edx@32 -// char v21; // dl@35 -// char v22; // dl@39 -// int v23; // edx@40 -// char v24; // dl@45 -// int v25; // edx@46 -// char v26; // dl@52 -// int v27; // edx@53 -// char v28; // dl@58 -// int v29; // edx@59 -// char v30; // dl@64 -// int v31; // edx@65 -// char v32; // dl@70 -// int v33; // edx@71 -// char v34; // dl@76 -// int v35; // edx@77 -// char v36; // dl@82 -// int v37; // edx@83 -// char v38; // dl@86 -// char v39; // dl@90 -// int v40; // edi@93 -// char v41; // dl@93 -// int v42; // esi@93 -// char v43; // bl@94 -// int v44; // esi@95 -// char v45; // dl@99 -// char v46; // dl@103 -// char v47; // dl@107 -// char v48; // dl@111 -// char v49; // dl@115 -// ArcomagePlayer *v50; // ebx@116 -// ArcomagePlayer *v51; // edx@116 -// int v52; // esi@124 -// int v53; // edx@124 -// int v54; // edx@127 -// int v55; // esi@130 -// int v56; // edi@138 -// int l; // esi@138 -// int v58; // eax@140 -// int v59; // ecx@142 -// int v60; // edx@142 -// int v61; // ebx@142 -// int v62; // eax@145 -// int v63; // esi@146 -// int v64; // ebx@4 -// int v65; // eax@4 -// int v66; // ecx@168 -// char v67; // bl@170 -// int v68; // eax@170 -// ArcomageCard *v69; // ecx@170 -// char v70; // dl@170 -// char v71; // dl@174 -// int v72; // edx@175 -// int v73; // edx@177 -// char v74; // dl@181 -// char v75; // dl@184 -// char v76; // dl@188 -// int v77; // edx@189 -// char v78; // dl@194 -// char v79; // dl@200 -// int v80; // edx@201 -// char v81; // dl@206 -// int v82; // edx@207 -// char v83; // dl@212 -// int v84; // edx@213 -// char v85; // dl@218 -// int v86; // edx@219 -// char v87; // dl@224 -// int v88; // edx@225 -// char v89; // dl@230 -// int v90; // edx@231 -// char v91; // dl@234 -// int v92; // edx@235 -// char v93; // dl@238 -// int v94; // edx@239 -// int v95; // esi@241 -// char v96; // dl@241 -// int v97; // esi@241 -// char v98; // bl@242 -// int v99; // edi@243 -// int v100; // edx@245 -// int v101; // edi@246 -// char v102; // dl@247 -// int v103; // edx@248 -// char v104; // dl@251 -// int v105; // edx@252 -// char v106; // dl@255 -// int v107; // edx@256 -// char v108; // dl@259 -// int v109; // edx@260 -// char v110; // dl@263 -// ArcomagePlayer *v111; // ebx@264 -// ArcomagePlayer *v112; // edx@264 -// int v113; // esi@272 -// int v114; // edx@272 -// int v115; // edx@275 -// int v116; // esi@278 -// int v117; // edi@286 -// int j; // esi@286 -// int v119; // eax@288 -// int v120; // ecx@290 -// int v121; // edx@290 -// int v122; // ebx@290 -// int v123; // eax@293 -// int v124; // esi@294 -// int v125; // [sp-28h] [bp-28h]@130 -// int v126; // [sp-28h] [bp-28h]@278 -// int k; // [sp-24h] [bp-24h]@18 -// int i; // [sp-24h] [bp-24h]@168 -// int v129; // [sp-20h] [bp-20h]@5 -// int v130; // [sp-20h] [bp-20h]@4 -// int v131; // [sp-1Ch] [bp-1Ch]@17 -// int v132; // [sp-1Ch] [bp-1Ch]@140 -// int v133; // [sp-1Ch] [bp-1Ch]@167 -// int v134; // [sp-1Ch] [bp-1Ch]@288 -// int v135; // [sp-18h] [bp-18h]@5 -// int v136; // [sp-18h] [bp-18h]@4 -// signed int v137; // [sp-14h] [bp-14h]@0 -// int v138; // [sp-14h] [bp-14h]@93 -// int v139; // [sp-14h] [bp-14h]@130 -// int v140; // [sp-14h] [bp-14h]@241 -// int v141; // [sp-14h] [bp-14h]@278 -// ArcomagePlayer *v142; // [sp-10h] [bp-10h]@5 -// ArcomagePlayer *v143; // [sp-10h] [bp-10h]@4 -// ArcomagePlayer *v144; // [sp-Ch] [bp-Ch]@5 -// ArcomagePlayer *v145; // [sp-Ch] [bp-Ch]@4 -// char v146; // [sp-8h] [bp-8h]@35 -// char v147; // [sp-8h] [bp-8h]@184 -// char v148; // [sp-5h] [bp-5h]@20 -// char v149; // [sp-5h] [bp-5h]@170 -// -// byte_4FAA00 = 1; -// if ( dword_4DF3A4 ) -// { -// if ( dword_4DF3A4 != 1 ) -// { -// result = dword_4DF3A4 - 2; -// if ( dword_4DF3A4 != 2 ) -// return result != 0; -// v64 = a1; -// v145 = &stru_505708[a1]; -// v130 = a1; -// v143 = &stru_505708[(a1 + 1) % 2]; -// v136 = GetPlayerHandCardCount(a1); -// v65 = 0; -// do -// { -// if ( v65 >= v136 ) -// { -// dword_4FA9B0[2 * v65] = -1; -// dword_4FA9B4[2 * v65] = -9999; -// } -// else -// { -// dword_4FA9B0[2 * v65] = v65; -// dword_4FA9B4[2 * v65] = 0; -// } -// ++v65; -// } -// while ( v65 < 10 ); -// v133 = 0; -// if ( v136 > 0 ) -// { -// v66 = 47 * v64; -// for ( i = 47 * v64; ; v66 = i ) -// { -// v67 = 99; -// v68 = 2 * v133; -// v69 = &pCards[stru_505708[0].cards_at_hand[v66 + dword_4FA9B0[2 * v133]]]; -// v70 = v69->field_38[2]; -// v149 = v69->field_38[2]; -// if ( v145->field_24 >= 10 ) -// { -// if ( v70 == 99 -// || v69->field_48[4] == 99 -// || v69->field_48[15] == 99 -// || (v74 = BYTE1(v69->field_68), v74 == 99) ) -// v73 = 5 * (v143->field_24 - v145->field_24); -// else -// v73 = 5 * (v149 + v69->field_48[4] + v69->field_48[15] + v74); -// } -// else -// { -// if ( v70 == 99 -// || v69->field_48[4] == 99 -// || v69->field_48[15] == 99 -// || (v71 = BYTE1(v69->field_68), v71 == 99) ) -// v72 = 5 * (v143->field_24 - v145->field_24); -// else -// v72 = 5 * (v149 + v69->field_48[4] + v69->field_48[15] + v71); -// v73 = 4 * v72; -// } -// dword_4FA9B4[v68] += v73; -// v75 = v69->field_38[1]; -// v147 = v69->field_38[1]; -// if ( v145->field_28 >= 10 ) -// { -// if ( v75 == 99 -// || v69->field_48[3] == 99 -// || v69->field_48[14] == 99 -// || (v78 = LOBYTE(v69->field_68), v78 == 99) ) -// v77 = v143->field_28 - v145->field_28; -// else -// v77 = v147 + v69->field_48[3] + v69->field_48[14] + v78; -// } -// else -// { -// if ( v75 == 99 -// || v69->field_48[3] == 99 -// || v69->field_48[14] == 99 -// || (v76 = LOBYTE(v69->field_68), v76 == 99) ) -// v77 = 5 * (v143->field_28 - v145->field_28); -// else -// v77 = 5 * (v147 + v69->field_48[3] + v69->field_48[14] + v76); -// } -// dword_4FA9B4[v68] += v77; -// dword_4FA9B4[v68] += 7 * (v69->field_38[0] + v69->field_48[2] + v69->field_48[13] + v69->field_58[15]); -// if ( BYTE2(v69->field_30) == 99 -// || v69->field_38[12] == 99 -// || v69->field_48[7] == 99 -// || (v79 = v69->field_58[9], v79 == 99) ) -// v80 = 5 * (v143->field_2C - v145->field_2C); -// else -// v80 = 5 * (BYTE2(v69->field_30) + v69->field_38[12] + v69->field_48[7] + v79); -// dword_4FA9B4[v68] += 8 * v80; -// if ( BYTE3(v69->field_30) == 99 -// || v69->field_38[13] == 99 -// || v69->field_48[8] == 99 -// || (v81 = v69->field_58[10], v81 == 99) ) -// v82 = 5 * (v143->field_30 - v145->field_30); -// else -// v82 = 5 * (BYTE3(v69->field_30) + v69->field_38[13] + v69->field_48[8] + v81); -// dword_4FA9B4[v68] += 8 * v82; -// if ( LOBYTE(v69->field_34) == 99 -// || v69->field_38[14] == 99 -// || v69->field_48[9] == 99 -// || (v83 = v69->field_58[11], v83 == 99) ) -// v84 = 5 * (v143->field_34 - v145->field_34); -// else -// v84 = 5 * (LOBYTE(v69->field_34) + v69->field_38[14] + v69->field_48[9] + v83); -// dword_4FA9B4[v68] += 8 * v84; -// if ( BYTE1(v69->field_34) == 99 -// || v69->field_38[15] == 99 -// || v69->field_48[10] == 99 -// || (v85 = v69->field_58[12], v85 == 99) ) -// v86 = v143->field_38 - v145->field_38; -// else -// v86 = BYTE1(v69->field_34) + v69->field_38[15] + v69->field_48[10] + v85; -// dword_4FA9B4[v68] += 2 * v86; -// if ( BYTE2(v69->field_34) == 99 -// || v69->field_48[0] == 99 -// || v69->field_48[11] == 99 -// || (v87 = v69->field_58[13], v87 == 99) ) -// v88 = v143->field_3C - v145->field_3C; -// else -// v88 = BYTE2(v69->field_34) + v69->field_48[0] + v69->field_48[11] + v87; -// dword_4FA9B4[v68] += 2 * v88; -// if ( BYTE3(v69->field_34) == 99 -// || v69->field_48[1] == 99 -// || v69->field_48[12] == 99 -// || (v89 = v69->field_58[14], v89 == 99) ) -// v90 = v143->field_40 - v145->field_40; -// else -// v90 = BYTE3(v69->field_34) + v69->field_48[1] + v69->field_48[12] + v89; -// dword_4FA9B4[v68] += 2 * v90; -// if ( v69->field_38[11] == 99 || (v91 = v69->field_58[8], v91 == 99) ) -// v92 = 10 * (v145->field_24 - v143->field_24); -// else -// v92 = -10 * (v69->field_38[11] + v91); -// dword_4FA9B4[v68] += v92; -// if ( v69->field_38[10] == 99 || (v93 = v69->field_58[7], v93 == 99) ) -// v94 = 3 * (v145->field_28 - v143->field_28); -// else -// v94 = -3 * (v69->field_38[10] + v93); -// dword_4FA9B4[v68] += v94; -// v95 = v69->field_38[9]; -// v140 = v95; -// v96 = v69->field_38[3]; -// dword_4FA9B4[v68] += -7 * (v69->field_58[6] + v95); -// v97 = dword_4FA9B4[v68]; -// if ( v96 == 99 ) -// goto LABEL_245; -// v98 = v69->field_58[0]; -// if ( v98 == 99 ) -// break; -// v99 = v96 + v98; -// v67 = 99; -// dword_4FA9B4[v68] = v97 - 5 * v99; -//LABEL_246: -// v101 = v140; -// if ( v69->field_38[4] == v67 || (v102 = v69->field_58[1], v102 == v67) ) -// v103 = 5 * (v145->field_30 - v143->field_30); -// else -// v103 = -5 * (v69->field_38[4] + v102); -// dword_4FA9B4[v68] += v103; -// if ( v69->field_38[5] == v67 || (v104 = v69->field_58[2], v104 == v67) ) -// v105 = 5 * (v145->field_34 - v143->field_34); -// else -// v105 = -5 * (v69->field_38[5] + v104); -// dword_4FA9B4[v68] += v105; -// if ( v69->field_38[6] == v67 || (v106 = v69->field_58[3], v106 == v67) ) -// v107 = v145->field_38 - v143->field_38; -// else -// v107 = -(v69->field_38[6] + v106); -// dword_4FA9B4[v68] += 2 * v107; -// if ( v69->field_38[7] == v67 || (v108 = v69->field_58[4], v108 == v67) ) -// v109 = v145->field_3C - v143->field_3C; -// else -// v109 = -(v69->field_38[7] + v108); -// dword_4FA9B4[v68] += 2 * v109; -// if ( v69->field_38[8] == v67 || (v110 = v69->field_58[5], v110 == v67) ) -// { -// v112 = v145; -// v111 = v143; -// dword_4FA9B4[v68] += 2 * (v145->field_40 - v143->field_40); -// } -// else -// { -// v111 = v143; -// dword_4FA9B4[v68] += -2 * (v69->field_38[8] + v110); -// v112 = v145; -// } -// if ( LOBYTE(v69->field_30) || v69->field_48[5] ) -// dword_4FA9B4[v68] *= 10; -// if ( LOBYTE(v69->field_24) == 1 ) -// { -// v113 = LOBYTE(v69->field_28); -// v114 = v112->field_38; -// } -// else -// { -// if ( LOBYTE(v69->field_24) == 2 ) -// { -// v113 = BYTE1(v69->field_28); -// v114 = v112->field_3C; -// } -// else -// { -// if ( LOBYTE(v69->field_24) != 3 ) -// goto LABEL_278; -// v113 = BYTE2(v69->field_28); -// v114 = v112->field_40; -// } -// } -// v115 = v114 - v113; -// if ( v115 > 3 ) -// v115 = 3; -// dword_4FA9B4[v68] += 5 * v115; -//LABEL_278: -// v116 = v69->field_58[8]; -// v141 = v111->field_24; -// v126 = v69->field_38[11]; -// if ( v141 <= v116 + v126 ) -// dword_4FA9B4[v68] += 9999; -// v137 = v111->field_28 + v141; -// if ( v137 <= v116 + v126 + v69->field_58[6] + v69->field_58[7] + v101 + v69->field_38[10] ) -// dword_4FA9B4[v68] += 9999; -// if ( v69->field_48[15] + (signed int)BYTE1(v69->field_68) + v145->field_24 + v69->field_48[4] + v149 >= dword_4E1884 ) -// dword_4FA9B4[v68] += 9999; -// ++v133; -// if ( v133 >= v136 ) -// { -// v64 = v130; -// goto LABEL_286; -// } -// } -// v67 = 99; -//LABEL_245: -// v100 = v145->field_2C - v143->field_2C; -// dword_4FA9B4[v68] = v97 + 4 * v100 + v100; -// goto LABEL_246; -// } -//LABEL_286: -// v117 = v136 - 1; -// for ( j = v136 - 1; j >= 0; --j ) -// { -// v137 = 0; -// if ( j > 0 ) -// { -// v119 = (int)dword_4FA9B0; -// v134 = j; -// v137 = j; -// do -// { -// if ( *(unsigned int *)(v119 + 4) < *(unsigned int *)(v119 + 12) ) -// { -// v120 = *(unsigned int *)v119; -// v121 = *(unsigned int *)(v119 + 4); -// *(unsigned int *)v119 = *(unsigned int *)(v119 + 8); -// v122 = *(unsigned int *)(v119 + 12); -// *(unsigned int *)(v119 + 8) = v120; -// *(unsigned int *)(v119 + 4) = v122; -// v64 = v130; -// *(unsigned int *)(v119 + 12) = v121; -// } -// v119 += 8; -// --v134; -// } -// while ( v134 ); -// } -// } -// v123 = v136 - 1; -// if ( am_byte_4FAA77 ) -// { -// if ( v117 >= 0 ) -// { -// while ( !BYTE3(pCards[stru_505708[0].cards_at_hand[47 * v64 + dword_4FA9B0[2 * v123]]].field_28) ) -// { -// --v123; -// if ( v123 < 0 ) -// return am_40BCFB(v64, v137) != 0; -// } -// v137 = dword_4FA9B0[2 * v123]; -// } -// } -// else -// { -// v124 = 0; -// if ( v117 >= 0 ) -// { -// while ( !BYTE3(pCards[stru_505708[0].cards_at_hand[47 * v64 + dword_4FA9B0[2 * v123]]].field_28) ) -// { -// --v123; -// if ( v123 < 0 ) -// goto LABEL_299; -// } -// v137 = dword_4FA9B0[2 * v123]; -// } -//LABEL_299: -// if ( v136 > 0 ) -// { -// while ( !am_40BF15(v64, dword_4FA9B0[2 * v124]) || dword_4FA9B4[2 * v124] < 0 ) -// { -// ++v124; -// if ( v124 >= v136 ) -// return am_40BCFB(v64, v137) != 0; -// } -// return am_40BE0E(v64, dword_4FA9B0[2 * v124]) != 0; -// } -// } -// return am_40BCFB(v64, v137) != 0; -// } -// v9 = a1; -// v144 = &stru_505708[a1]; -// v129 = a1; -// v142 = &stru_505708[(a1 + 1) % 2]; -// v135 = GetPlayerHandCardCount(a1); -// v10 = 0; -// do -// { -// if ( v10 >= v135 ) -// { -// dword_4FA9B0[2 * v10] = -1; -// dword_4FA9B4[2 * v10] = -9999; -// } -// else -// { -// dword_4FA9B0[2 * v10] = v10; -// dword_4FA9B4[2 * v10] = 0; -// } -// ++v10; -// } -// while ( v10 < 10 ); -// v131 = 0; -// if ( v135 > 0 ) -// { -// v11 = 47 * v9; -// for ( k = 47 * v9; ; v11 = k ) -// { -// v12 = 99; -// v13 = 2 * v131; -// v14 = &pCards[stru_505708[0].cards_at_hand[v11 + dword_4FA9B0[2 * v131]]]; -// v15 = v14->field_38[2]; -// v148 = v14->field_38[2]; -// if ( v144->field_24 >= 10 ) -// { -// if ( v15 == 99 || v14->field_48[4] == 99 || v14->field_48[15] == 99 || (v19 = BYTE1(v14->field_68), v19 == 99) ) -// v20 = 5 * (v142->field_24 - v144->field_24); -// else -// v20 = 5 * (v148 + v14->field_48[4] + v14->field_48[15] + v19); -// v18 = 2 * v20; -// } -// else -// { -// if ( v15 == 99 || v14->field_48[4] == 99 || v14->field_48[15] == 99 || (v16 = BYTE1(v14->field_68), v16 == 99) ) -// v17 = 5 * (v142->field_24 - v144->field_24); -// else -// v17 = 5 * (v148 + v14->field_48[4] + v14->field_48[15] + v16); -// v18 = 4 * v17; -// } -// dword_4FA9B4[v13] += v18; -// v21 = v14->field_38[1]; -// v146 = v14->field_38[1]; -// if ( v144->field_28 >= 10 ) -// { -// if ( v21 == 99 -// || v14->field_48[3] == 99 -// || v14->field_48[14] == 99 -// || (v24 = LOBYTE(v14->field_68), v24 == 99) ) -// v25 = v142->field_28 - v144->field_28; -// else -// v25 = v146 + v14->field_48[3] + v14->field_48[14] + v24; -// v23 = 2 * v25; -// } -// else -// { -// if ( v21 == 99 -// || v14->field_48[3] == 99 -// || v14->field_48[14] == 99 -// || (v22 = LOBYTE(v14->field_68), v22 == 99) ) -// v23 = 5 * (v142->field_28 - v144->field_28); -// else -// v23 = 5 * (v146 + v14->field_48[3] + v14->field_48[14] + v22); -// } -// dword_4FA9B4[v13] += v23; -// dword_4FA9B4[v13] += 7 * (v14->field_38[0] + v14->field_48[2] + v14->field_48[13] + v14->field_58[15]); -// if ( BYTE2(v14->field_30) == 99 -// || v14->field_38[12] == 99 -// || v14->field_48[7] == 99 -// || (v26 = v14->field_58[9], v26 == 99) ) -// v27 = 5 * (v142->field_2C - v144->field_2C); -// else -// v27 = 5 * (BYTE2(v14->field_30) + v14->field_38[12] + v14->field_48[7] + v26); -// dword_4FA9B4[v13] += 8 * v27; -// if ( BYTE3(v14->field_30) == 99 -// || v14->field_38[13] == 99 -// || v14->field_48[8] == 99 -// || (v28 = v14->field_58[10], v28 == 99) ) -// v29 = 5 * (v142->field_30 - v144->field_30); -// else -// v29 = 5 * (BYTE3(v14->field_30) + v14->field_38[13] + v14->field_48[8] + v28); -// dword_4FA9B4[v13] += 8 * v29; -// if ( LOBYTE(v14->field_34) == 99 -// || v14->field_38[14] == 99 -// || v14->field_48[9] == 99 -// || (v30 = v14->field_58[11], v30 == 99) ) -// v31 = 5 * (v142->field_34 - v144->field_34); -// else -// v31 = 5 * (LOBYTE(v14->field_34) + v14->field_38[14] + v14->field_48[9] + v30); -// dword_4FA9B4[v13] += 8 * v31; -// if ( BYTE1(v14->field_34) == 99 -// || v14->field_38[15] == 99 -// || v14->field_48[10] == 99 -// || (v32 = v14->field_58[12], v32 == 99) ) -// v33 = v142->field_38 - v144->field_38; -// else -// v33 = BYTE1(v14->field_34) + v14->field_38[15] + v14->field_48[10] + v32; -// dword_4FA9B4[v13] += 2 * v33; -// if ( BYTE2(v14->field_34) == 99 -// || v14->field_48[0] == 99 -// || v14->field_48[11] == 99 -// || (v34 = v14->field_58[13], v34 == 99) ) -// v35 = v142->field_3C - v144->field_3C; -// else -// v35 = BYTE2(v14->field_34) + v14->field_48[0] + v14->field_48[11] + v34; -// dword_4FA9B4[v13] += 2 * v35; -// if ( BYTE3(v14->field_34) == 99 -// || v14->field_48[1] == 99 -// || v14->field_48[12] == 99 -// || (v36 = v14->field_58[14], v36 == 99) ) -// v37 = v142->field_40 - v144->field_40; -// else -// v37 = BYTE3(v14->field_34) + v14->field_48[1] + v14->field_48[12] + v36; -// dword_4FA9B4[v13] += 2 * v37; -// if ( v14->field_38[11] == 99 || (v38 = v14->field_58[8], v38 == 99) ) -// dword_4FA9B4[v13] += v144->field_24 - v142->field_24; -// else -// dword_4FA9B4[v13] -= v14->field_38[11] + v38; -// if ( v14->field_38[10] == 99 || (v39 = v14->field_58[7], v39 == 99) ) -// dword_4FA9B4[v13] += v144->field_28 - v142->field_28; -// else -// dword_4FA9B4[v13] -= v14->field_38[10] + v39; -// v40 = v14->field_38[9]; -// v138 = v14->field_38[9]; -// dword_4FA9B4[v13] -= v40 + v14->field_58[6]; -// v41 = v14->field_38[3]; -// v42 = dword_4FA9B4[v13]; -// if ( v41 == 99 ) -// goto LABEL_97; -// v43 = v14->field_58[0]; -// if ( v43 == 99 ) -// break; -// v44 = v42 - v43; -// v12 = 99; -// dword_4FA9B4[v13] = v44 - v41; -//LABEL_98: -// if ( v14->field_38[4] == v12 || (v45 = v14->field_58[1], v45 == v12) ) -// dword_4FA9B4[v13] += v144->field_30 - v142->field_30; -// else -// dword_4FA9B4[v13] -= v14->field_38[4] + v45; -// if ( v14->field_38[5] == v12 || (v46 = v14->field_58[2], v46 == v12) ) -// dword_4FA9B4[v13] += v144->field_34 - v142->field_34; -// else -// dword_4FA9B4[v13] -= v14->field_38[5] + v46; -// if ( v14->field_38[6] == v12 || (v47 = v14->field_58[3], v47 == v12) ) -// dword_4FA9B4[v13] += v144->field_38 - v142->field_38; -// else -// dword_4FA9B4[v13] -= v14->field_38[6] + v47; -// if ( v14->field_38[7] == v12 || (v48 = v14->field_58[4], v48 == v12) ) -// dword_4FA9B4[v13] += v144->field_3C - v142->field_3C; -// else -// dword_4FA9B4[v13] -= v14->field_38[7] + v48; -// if ( v14->field_38[8] == v12 || (v49 = v14->field_58[5], v49 == v12) ) -// { -// v51 = v144; -// v50 = v142; -// dword_4FA9B4[v13] += v144->field_40 - v142->field_40; -// } -// else -// { -// v50 = v142; -// dword_4FA9B4[v13] -= v14->field_38[8] + v49; -// v51 = v144; -// } -// if ( LOBYTE(v14->field_30) || v14->field_48[5] ) -// dword_4FA9B4[v13] *= 10; -// if ( LOBYTE(v14->field_24) == 1 ) -// { -// v52 = LOBYTE(v14->field_28); -// v53 = v51->field_38; -// } -// else -// { -// if ( LOBYTE(v14->field_24) == 2 ) -// { -// v52 = BYTE1(v14->field_28); -// v53 = v51->field_3C; -// } -// else -// { -// if ( LOBYTE(v14->field_24) != 3 ) -// goto LABEL_130; -// v52 = BYTE2(v14->field_28); -// v53 = v51->field_40; -// } -// } -// v54 = v53 - v52; -// if ( v54 > 3 ) -// v54 = 3; -// dword_4FA9B4[v13] += 5 * v54; -//LABEL_130: -// v55 = v14->field_58[8]; -// v139 = v50->field_24; -// v125 = v14->field_38[11]; -// if ( v139 <= v55 + v125 ) -// dword_4FA9B4[v13] += 9999; -// v137 = v50->field_28 + v139; -// if ( v137 <= v55 + v125 + v14->field_58[6] + v14->field_58[7] + v40 + v14->field_38[10] ) -// dword_4FA9B4[v13] += 9999; -// if ( v14->field_48[15] + (signed int)BYTE1(v14->field_68) + v144->field_24 + v14->field_48[4] + v148 >= dword_4E1884 ) -// dword_4FA9B4[v13] += 9999; -// ++v131; -// if ( v131 >= v135 ) -// { -// v9 = v129; -// goto LABEL_138; -// } -// } -// v12 = 99; -//LABEL_97: -// v40 = v138; -// dword_4FA9B4[v13] = v42 + v144->field_2C - v142->field_2C; -// goto LABEL_98; -// } -//LABEL_138: -// v56 = v135 - 1; -// for ( l = v135 - 1; l >= 0; --l ) -// { -// v137 = 0; -// if ( l > 0 ) -// { -// v58 = (int)dword_4FA9B0; -// v132 = l; -// v137 = l; -// do -// { -// if ( *(unsigned int *)(v58 + 4) < *(unsigned int *)(v58 + 12) ) -// { -// v59 = *(unsigned int *)v58; -// v60 = *(unsigned int *)(v58 + 4); -// *(unsigned int *)v58 = *(unsigned int *)(v58 + 8); -// v61 = *(unsigned int *)(v58 + 12); -// *(unsigned int *)(v58 + 8) = v59; -// *(unsigned int *)(v58 + 4) = v61; -// v9 = v129; -// *(unsigned int *)(v58 + 12) = v60; -// } -// v58 += 8; -// --v132; -// } -// while ( v132 ); -// } -// } -// v62 = v135 - 1; -// if ( am_byte_4FAA77 ) -// { -// if ( v56 >= 0 ) -// { -// while ( !BYTE3(pCards[stru_505708[0].cards_at_hand[47 * v9 + dword_4FA9B0[2 * v62]]].field_28) ) -// { -// --v62; -// if ( v62 < 0 ) -// return am_40BCFB(v9, v137) != 0; -// } -// v137 = dword_4FA9B0[2 * v62]; -// } -// } -// else -// { -// v63 = 0; -// if ( v56 >= 0 ) -// { -// while ( !BYTE3(pCards[stru_505708[0].cards_at_hand[47 * v9 + dword_4FA9B0[2 * v62]]].field_28) ) -// { -// --v62; -// if ( v62 < 0 ) -// goto LABEL_151; -// } -// v137 = dword_4FA9B0[2 * v62]; -// } -//LABEL_151: -// if ( v135 > 0 ) -// { -// while ( !am_40BF15(v9, dword_4FA9B0[2 * v63]) || dword_4FA9B4[2 * v63] < 0 ) -// { -// ++v63; -// if ( v63 >= v135 ) -// return am_40BCFB(v9, v137) != 0; -// } -// return am_40BE0E(v9, dword_4FA9B0[2 * v63]) != 0; -// } -// } -// return am_40BCFB(v9, v137) != 0; -// } -// v3 = 0; -// v4 = a1; -// if ( am_byte_4FAA77 ) -// { -//LABEL_11: -// v7 = GetPlayerHandCardCount(v4); -// v8 = rand_interval(0, v7 - 1); -// result = am_40BCFB(v4, v8); -// } -// else -// { -// while ( 1 ) -// { -// v5 = GetPlayerHandCardCount(v4); -// v6 = rand_interval(0, v5 - 1); -// if ( am_40BF15(v4, v6) ) -// break; -// ++v3; -// if ( v3 >= 10 ) -// goto LABEL_11; -// } -// result = am_40BE0E(v4, v6); -// } + + char result; // al@3 + signed int v2; // ebx@8 + int v3; // esi@8 + int all_player_cards_count; // eax@9 + int random_card_slot; // edi@9 + int v6; // eax@11 + signed int v7; // eax@11 + int v8; // ebx@5 + int v9; // eax@5 + int v10; // ecx@18 + int v11; // eax@20 + ArcomageCard *v12; // ecx@20 + char v13; // dl@20 + char v14; // dl@24 + int v15; // edx@25 + int v16; // edx@27 + char v17; // dl@31 + int v18; // edx@32 + char v19; // dl@35 + char v20; // dl@39 + int v21; // edx@40 + char v22; // dl@45 + int v23; // edx@46 + char v24; // dl@52 + int v25; // edx@53 + char v26; // dl@58 + int v27; // edx@59 + char v28; // dl@64 + int v29; // edx@65 + char v30; // dl@70 + int v31; // edx@71 + char v32; // dl@76 + int v33; // edx@77 + char v34; // dl@82 + int v35; // edx@83 + char v36; // dl@86 + char v37; // dl@90 + int v38; // edi@93 + char v39; // dl@93 + int v40; // esi@93 + char v41; // bl@94 + char v42; // dl@98 + char v43; // dl@102 + char v44; // dl@106 + char v45; // dl@110 + char v46; // dl@114 + ArcomagePlayer *v47; // ebx@115 + ArcomagePlayer *v48; // edx@115 + int v49; // esi@123 + int v50; // edx@123 + int v51; // edx@126 + int v52; // esi@129 + int v53; // edi@137 + int j; // esi@137 + am_2 *v55; // eax@139 + int v56; // ecx@141 + int v57; // edx@141 + int v58; // ebx@141 + int v59; // eax@144 + int v60; // esi@145 + int v61; // ebx@4 + int v62; // eax@4 + int v63; // ecx@167 + int v64; // eax@169 + ArcomageCard *pCard; // ecx@169 + char v66; // dl@169 + char v67; // dl@173 + int v68; // edx@174 + int v69; // edx@176 + char v70; // dl@180 + char v71; // dl@183 + char v72; // dl@187 + int v73; // edx@188 + char v74; // dl@193 + char v75; // dl@199 + int v76; // edx@200 + char v77; // dl@205 + int v78; // edx@206 + char v79; // dl@211 + int v80; // edx@212 + char v81; // dl@217 + int v82; // edx@218 + char v83; // dl@223 + int v84; // edx@224 + char v85; // dl@229 + int v86; // edx@230 + char v87; // dl@233 + int v88; // edx@234 + char v89; // dl@237 + int v90; // edx@238 + int v91; // esi@240 + char v92; // dl@240 + int v93; // esi@240 + char v94; // bl@241 + int v95; // edx@243 + int v96; // edi@244 + char v97; // dl@245 + int v98; // edx@246 + char v99; // dl@249 + int v100; // edx@250 + char v101; // dl@253 + int v102; // edx@254 + char v103; // dl@257 + int v104; // edx@258 + char v105; // dl@261 + ArcomagePlayer *v106; // ebx@262 + ArcomagePlayer *v107; // edx@262 + int v108; // esi@270 + int v109; // edx@270 + int v110; // edx@273 + int v111; // esi@276 + int v112; // edi@284 + // int j; // esi@284 + am_2 *v114; // eax@286 + int v115; // ecx@288 + int v116; // edx@288 + int v117; // ebx@288 + int v118; // eax@291 + int v119; // esi@292 + int v120; // [sp-28h] [bp-28h]@129 + int v121; // [sp-28h] [bp-28h]@276 + int k; // [sp-24h] [bp-24h]@18 + int i; // [sp-24h] [bp-24h]@167 + int v124; // [sp-20h] [bp-20h]@5 + int v125; // [sp-20h] [bp-20h]@4 + int v126; // [sp-1Ch] [bp-1Ch]@17 + int v127; // [sp-1Ch] [bp-1Ch]@139 + int v128; // [sp-1Ch] [bp-1Ch]@166 + int v129; // [sp-1Ch] [bp-1Ch]@286 + int v130; // [sp-18h] [bp-18h]@5 + int cards_count; // [sp-18h] [bp-18h]@4 + int v132; // [sp-14h] [bp-14h]@0 + int v133; // [sp-14h] [bp-14h]@93 + int v134; // [sp-14h] [bp-14h]@129 + int v135; // [sp-14h] [bp-14h]@240 + int v136; // [sp-14h] [bp-14h]@276 + ArcomagePlayer *enemy; // [sp-10h] [bp-10h]@5 + ArcomagePlayer *enemy1; // [sp-10h] [bp-10h]@4 + ArcomagePlayer *player; // [sp-Ch] [bp-Ch]@5 + ArcomagePlayer *player1; // [sp-Ch] [bp-Ch]@4 + char v141; // [sp-8h] [bp-8h]@35 + char v142; // [sp-8h] [bp-8h]@183 + char v143; // [sp-5h] [bp-5h]@20 + char v144; // [sp-5h] [bp-5h]@169 + + byte_4FAA00 = 1; + if ( opponent_mastery == 0) + { + if ( need_to_discard_card==0 ) //am_byte_4FAA77 + { + for(int i = 0; i<10 ; ++i ) + { + all_player_cards_count = GetPlayerHandCardCount(player_num); + random_card_slot = rand_interval(0, all_player_cards_count - 1); + if ( CanCardBePlayed(player_num, random_card_slot) ) + return PlayCard(player_num, random_card_slot); + } + } + all_player_cards_count = GetPlayerHandCardCount(player_num); + random_card_slot= rand_interval(0, all_player_cards_count - 1); + return DiscardCard(player_num, random_card_slot); + } + else if (( opponent_mastery == 1 )|| ( opponent_mastery == 2 )) + { + player = &am_Players[player_num]; + enemy = &am_Players[(player_num + 1) % 2]; + all_player_cards_count = GetPlayerHandCardCount(player_num); + for(int i = 0; i<10 ; ++i ) + { + if ( i >= all_player_cards_count ) + { + cards_power[i].slot_index = -1; + cards_power[i].card_power = -9999; + } + else + { + cards_power[i].slot_index = i; + cards_power[i].card_power = 0; + } + } + for(int i = 0; i< all_player_cards_count ; ++i ) + { + v12 = &pCards[am_Players[player_num].cards_at_hand[cards_power[i].slot_index]]; + cards_power[i].card_power = CalculateCardPower(player, enemy, v12, opponent_mastery-1); + } + + for (int j = all_player_cards_count - 1; j >= 0; --j ) + { + for (int m=0; m<j; ++m ) + { + if ( cards_power[m].card_power < cards_power[m+1].card_power ) + { + v56 = cards_power[m].slot_index; + v57 = cards_power[m].card_power; + cards_power[m].slot_index = cards_power[m+1].slot_index; + cards_power[m].card_power = cards_power[m+1].card_power; + cards_power[m+1].slot_index = v56; + cards_power[m+1].card_power = v57; + } + } + } + v59 = all_player_cards_count - 1; + if ( need_to_discard_card ) + { + if ( all_player_cards_count - 1 >= 0 ) + { + while ( !pCards[am_Players[player_num].cards_at_hand[cards_power[v59].slot_index]].can_be_discarded ) + { + --v59; + if ( v59 < 0 ) + return DiscardCard(player_num, v132); + } + v132 = cards_power[v59].slot_index; + } + } + else + { + v60 = 0; + if ( all_player_cards_count - 1 >= 0 ) + { + while ( !pCards[am_Players[player_num].cards_at_hand[cards_power[v59].slot_index]].can_be_discarded ) + { + --v59; + if ( v59 < 0 ) + goto LABEL_150; + } + v132 = cards_power[v59].slot_index; + } +LABEL_150: + if ( (all_player_cards_count - 1)> 0 ) + { + while ( !CanCardBePlayed(player_num, cards_power[v60].slot_index) || cards_power[v60].card_power < 0 ) + { + ++v60; + if ( v60 >= all_player_cards_count - 1 ) + return DiscardCard(player_num, v132); + } + return PlayCard(player_num, cards_power[v60].slot_index); + } + } + return DiscardCard(player_num, v132); + } + + return true;//result != 0; } -// 408BB4: could not find valid save-restore pair for ebp -// 4DF3A4: using guessed type int dword_4DF3A4; -// 4E1884: using guessed type int dword_4E1884; -// 4FA9B0: using guessed type int dword_4FA9B0[]; -// 4FA9B4: using guessed type int dword_4FA9B4[]; -// 4FAA00: using guessed type char byte_4FAA00; -// 4FAA77: using guessed type char am_byte_4FAA77; @@ -1568,18 +1248,18 @@ GetNextCardFromDeck(current_player_num); while ( 1 ) { - byte_4FAA24 = am_40A560(current_player_num); + byte_4FAA24 = PlayerTurn(current_player_num); if ( GetPlayerHandCardCount(current_player_num) <= minimum_cards_at_hand ) break; - am_byte_4FAA77 = 1; + need_to_discard_card = 1; if ( pArcomageGame->field_F4 ) goto LABEL_8; } - am_byte_4FAA77 = 0; + need_to_discard_card = 0; } pArcomageGame->GameOver = IsGameOver(); if ( !pArcomageGame->GameOver ) - am_40A383(); + TurnChange(); if ( pArcomageGame->field_F4 ) pArcomageGame->GameOver = 1; } @@ -1657,16 +1337,15 @@ am_Players[i].cards_at_hand[j] = -1; if ( am_byte_4E185D ) { - am_Players[i].arr_6C[j].field_0 = -1; - am_Players[i].arr_6C[j].field_4 = -1; + am_Players[i].card_shift[j].x = -1; + am_Players[i].card_shift[j].y = -1; } else { - am_Players[i].arr_6C[j].field_0 = 0; - am_Players[i].arr_6C[j].field_4 = 0; + am_Players[i].card_shift[j].x = 0; + am_Players[i].card_shift[j].y = 0; } - } - + } } strcpy(deckMaster.name, pDeckMaster); for (i=0, card_dispenser_counter=-2, card_id_counter=0; i<DECK_SIZE; ++i, ++card_dispenser_counter) @@ -1708,11 +1387,9 @@ //----- (0040A198) -------------------------------------------------------- void FillPlayerDeck() { - - signed int v3; // eax@4 - int v6; // edx@13 - char v7; // eax@13 - char card_taken_flags[DECK_SIZE]; // [sp+8h] [bp-6Ch]@1 + signed int m; + int rand_deck_pos; + char card_taken_flags[DECK_SIZE]; int i,j; ArcomageGame::PlaySound(20); @@ -1725,11 +1402,11 @@ { if ( am_Players[i].cards_at_hand[j] > -1 ) { - for (v3 = 0; v3<DECK_SIZE; ++v3) + for (m = 0; m<DECK_SIZE; ++m) { - if (deckMaster.cards_IDs[v3] == am_Players[i].cards_at_hand[j] && deckMaster.cardsInUse[v3] == 0) + if (deckMaster.cards_IDs[m] == am_Players[i].cards_at_hand[j] && deckMaster.cardsInUse[m] == 0) { - deckMaster.cardsInUse[v3] = 1; + deckMaster.cardsInUse[m] = 1; break; } } @@ -1740,14 +1417,12 @@ for (i=0; i<DECK_SIZE; ++i) { do - { - v6 = rand() % DECK_SIZE; - v7 = card_taken_flags[v6]; - } - while ( v7 == 1 ); - card_taken_flags[v6]=1; - playDeck.cards_IDs[i] = deckMaster.cards_IDs[v6]; - playDeck.cardsInUse[i] = deckMaster.cardsInUse[v6]; + rand_deck_pos = rand() % DECK_SIZE; + while (card_taken_flags[rand_deck_pos] == 1 ); + + card_taken_flags[rand_deck_pos]=1; + playDeck.cards_IDs[i] = deckMaster.cards_IDs[rand_deck_pos]; + playDeck.cardsInUse[i] = deckMaster.cardsInUse[rand_deck_pos]; } deck_walk_index = 0; @@ -1801,8 +1476,8 @@ { amuint_4FAA4C = card_slot_indx; am_Players[player_num].cards_at_hand[card_slot_indx] = new_card_id; - am_Players[player_num].arr_6C[card_slot_indx].field_0 = rand_interval(-4, 4); - am_Players[player_num].arr_6C[card_slot_indx].field_4 = rand_interval(-4, 4); + am_Players[player_num].card_shift[card_slot_indx].x = rand_interval(-4, 4); + am_Players[player_num].card_shift[card_slot_indx].y = rand_interval(-4, 4); pArcomageGame->field_F6 = 1; byte_4FAA2D = 1; } @@ -1830,20 +1505,16 @@ { am_Players[player_num].resource_bricks += quarry_bonus + am_Players[player_num].quarry_level; am_Players[player_num].resource_gems += magic_bonus + am_Players[player_num].magic_level; - am_Players[player_num].resource_beasts += zoo_bonus + am_Players[player_num].zoo_level; + am_Players[player_num].resource_beasts += zoo_bonus + am_Players[player_num].zoo_level; } //----- (0040A383) -------------------------------------------------------- -void __cdecl am_40A383() -{ - int v0; // eax@4 - int v1; // ecx@4 - unsigned __int8 v2; // sf@4 - unsigned __int8 v3; // of@4 - int v4; // eax@6 - char Dest[64]; // [sp+4h] [bp-64h]@4 - RECT v6; // [sp+44h] [bp-24h]@6 +void TurnChange() + { + + char player_name[64]; // [sp+4h] [bp-64h]@4 + // RECT v6; // [sp+44h] [bp-24h]@6 ArcomageGame_stru1 v10; // [sp+54h] [bp-14h]@7 POINT v11; // [sp+60h] [bp-8h]@4 @@ -1862,23 +1533,20 @@ //nullsub_1(); // v11.x = 0; // v11.y = 0; - strcpy(Dest,"The Next Player is: ");//"" + strcpy(player_name,"The Next Player is: ");//"" // v0 = 0; v11.y = 200; v11.x = 320; // - 12 * v0 / 2; - pPrimaryWindow_draws_text(-1, Dest, &v11); + pPrimaryWindow_draws_text(-1, player_name, &v11); am_byte_4FAA75 = 1; - v1 = ++current_player_num; - if ( v1 >= 2 ) - { - v1 = 0; + ++current_player_num; + if ( current_player_num >= 2 ) current_player_num = 0; - } - strcpy(Dest, am_Players[v1].pPlayerName); + strcpy(player_name, am_Players[current_player_num].pPlayerName); // v4 = 0; v11.y = 260; v11.x = 320;// - 12 * v4 / 2; - pPrimaryWindow_draws_text(-1, Dest, &v11); + pPrimaryWindow_draws_text(-1, player_name, &v11); /* v6.left = 0; v6.right = 640; v6.top = 0; @@ -1887,28 +1555,25 @@ CallRenderPresent(); //nullsub_1(); while ( 1 ) - { - while ( 1 ) - { + { while ( !ArcomageGame::MsgLoop(20, &v10) ) ; - if ( v10.field_0 != 1 ) - break; - if ( v10.field_4 ) - goto LABEL_13; - //nullsub_1(); - } - if ( v10.field_0 > 4 ) - { - if ( v10.field_0 <= 8 ) - goto LABEL_13; - if ( v10.field_0 == 10 ) - break; - } + if ( v10.field_0 == 1 ) + { + if ( v10.field_4 ) + break; + //nullsub_1(); + continue; + } + if (( v10.field_0 > 4 )&& ( v10.field_0 <= 8 )) + break; + if ( v10.field_0 == 10 ) + { + pArcomageGame->field_F4 = 1; + byte_4FAA74 = 1; + break; + } } - pArcomageGame->field_F4 = 1; - byte_4FAA74 = 1; -LABEL_13: /* v11.x = 0; v11.y = 0; v6.left = 0; @@ -1947,8 +1612,8 @@ //----- (0040A560) -------------------------------------------------------- -char am_40A560(unsigned int player_num) -{ +char PlayerTurn( int player_num ) + { int v1; // ebp@0 unsigned __int64 v2; // qax@3 unsigned __int64 v3; // kr00_8@3 @@ -1960,13 +1625,13 @@ int v10[4]; // [sp+80h] [bp-30h]@69 POINT pTargetXY; // [sp+90h] [bp-20h]@75 ArcomageGame_stru1 a2; // [sp+98h] [bp-18h]@8 - int v13; // [sp+A4h] [bp-Ch]@1 + int animation_stage; // [sp+A4h] [bp-Ch]@1 char v15; // [sp+AEh] [bp-2h]@63 - char v16; // [sp+AFh] [bp-1h]@1 + bool break_loop; // [sp+AFh] [bp-1h]@1 uCardID = -1; - v16 = 0; - v13 = 20; + break_loop = false; + animation_stage = 20; byte_4FAA00 = 0; dword_4FAA68 = 0; amuint_4FAA38 = 10; @@ -1982,9 +1647,9 @@ } while (v3 < 6); - pArcomageGame->event_timer_time = pEventTimer->Time(); + pArcomageGame->event_timer_time = (unsigned int )pEventTimer->Time(); if ( pArcomageGame->field_F4 ) - v16 = 1; + break_loop = 1; ArcomageGame::MsgLoop(0, &a2); switch ( a2.field_0 ) { @@ -1993,7 +1658,7 @@ { pAudioPlayer->StopChannels(-1, -1); dword_4FAA68 = 0; - v16 = 1; + break_loop = true; pArcomageGame->field_F4 = 1; } break; @@ -2003,16 +1668,17 @@ case 10: pAudioPlayer->StopChannels(-1, -1); byte_4FAA74 = 1; - v16 = 1; + break_loop = true; pArcomageGame->field_F4 = 1; break; } - if (am_Players[current_player_num].IsHisTurn != 1 && !byte_4FAA00 && !byte_4FAA2E && !byte_4FAA2D ) + if (am_Players[current_player_num].IsHisTurn != 1 && + !byte_4FAA00 && !byte_4FAA2E && !byte_4FAA2D ) { if ( am_byte_4FAA75 ) am_byte_4FAA76 = 1; - am_408BB4(current_player_num); + OpponentsAITurn(current_player_num); byte_4FAA2E = 1; } if ( amuint_4FAA4C != -1 && amuint_4FAA38 > 10 ) @@ -2027,13 +1693,13 @@ { byte_4FAA2D = 0; amuint_4FAA38 = 10; - v16 = 0; + break_loop = false; } } if ( byte_4FAA2E ) { - --v13; - if ( v13 < 0 ) + --animation_stage; + if ( animation_stage < 0 ) { if ( dword_4FAA68 > 1 ) { @@ -2042,36 +1708,36 @@ } else { - v16 = 1; + break_loop = true; } byte_4FAA2E = 0; - v13 = 20; + animation_stage = 20; } } } else { - if ( am_byte_4FAA77 ) + if ( need_to_discard_card ) { - if ( a2.field_0 == 7 && am_40BCFB(player_num, current_card_slot_index) ) + if ( a2.field_0 == 7 && DiscardCard(player_num, current_card_slot_index) ) { if ( am_byte_4FAA75 ) am_byte_4FAA76 = 1; if ( dword_4FAA64 > 0 ) { --dword_4FAA64; - am_byte_4FAA77 = GetPlayerHandCardCount(player_num) > minimum_cards_at_hand; + need_to_discard_card = GetPlayerHandCardCount(player_num) > minimum_cards_at_hand; } byte_4FAA2E = 1; } - if ( a2.field_0 == 8 && am_40BCFB(player_num, current_card_slot_index) ) + if ( a2.field_0 == 8 && DiscardCard(player_num, current_card_slot_index) ) { if ( am_byte_4FAA75 ) am_byte_4FAA76 = 1; if ( dword_4FAA64 > 0 ) { --dword_4FAA64; - am_byte_4FAA77 = GetPlayerHandCardCount(player_num) > minimum_cards_at_hand; + need_to_discard_card = GetPlayerHandCardCount(player_num) > minimum_cards_at_hand; } byte_4FAA2E = 1; } @@ -2089,7 +1755,7 @@ } if ( a2.field_0 == 8 ) { - if ( am_40BCFB(player_num, current_card_slot_index) ) + if ( DiscardCard(player_num, current_card_slot_index) ) { byte_4FAA2E = 1; if ( am_byte_4FAA75 ) @@ -2134,12 +1800,12 @@ //} if ( dword_4FABB8 != DrawCardsRectangles(player_num) ) { - dword_4FABB8 = DrawCardsRectangles(player_num); - pArcomageGame->field_F6 = 1; + dword_4FABB8 = DrawCardsRectangles(player_num); + pArcomageGame->field_F6 = 1; } if ( pArcomageGame->field_F6 ) { - DrawGameUI(v13); + DrawGameUI(animation_stage); DoBlt_Copy(pArcomageGame->pBackgroundPixels); pArcomageGame->field_F6 = 0; } @@ -2154,18 +1820,18 @@ am_BeginScene(pArcomageGame->pBackgroundPixels, -1, 1); Blt_Copy(&pSrcXYZW, &pTargetXY, 2); am_EndScene(); - DrawGameUI(v13); + DrawGameUI(animation_stage); pRenderer->Present(); pArcomageGame->field_F9 = 0; } } - while ( !v16 ); + while ( !break_loop ); return dword_4FAA68 > 0; } //----- (0040A9AF) -------------------------------------------------------- -void DrawGameUI( int a1 ) +void DrawGameUI( int animation_stage ) { am_BeginScene(pArcomageGame->pSpritesPixels, -1, 1); @@ -2180,54 +1846,41 @@ am_EndScene(); am_BeginScene(pArcomageGame->pSpritesPixels, -1, 1); - DrawCardAnimation(a1); + DrawCardAnimation(animation_stage); for( int i=0; i<10; ++i) { - if (array_4FABD0[i].field_0) - array_4FABD0[i].field_40->_40E133(); + if (array_4FABD0[i].have_effect) + array_4FABD0[i].field_40->DrawEffect(); } current_card_slot_index = DrawCardsRectangles(current_player_num); - am_40AA4E(); + DrawSparks(); am_EndScene(); } //----- (0040AA4E) -------------------------------------------------------- -void am_40AA4E() +void DrawSparks() { - int v5; // [sp-4h] [bp-2Ch]@4 - unsigned int v7; - int v8; // [sp+14h] [bp-14h]@10 - int v9; // [sp+18h] [bp-10h]@10 - RECT pXYZW; - - v9 = 0x0000FF00; - v8 = 0x000000FF; + int rgb_pixel_color; // [sp-4h] [bp-2Ch]@4 + unsigned int pixel_color; for (int i=0; i<10; ++i) { - if(array_4FABD0[i].field_0 && (array_4FABD0[i].field_40->_40E2A7()==2)) + if(array_4FABD0[i].have_effect && (array_4FABD0[i].field_40->_40E2A7()==2)) { - - v5 = v9; - if ( !array_4FABD0[i].field_1 ) - v5 = v8; - - v7 = R8G8B8_to_TargetFormat(v5); + rgb_pixel_color = 0x0000FF00; + if ( !array_4FABD0[i].effect_sign ) + rgb_pixel_color = 0x000000FF; + + pixel_color = R8G8B8_to_TargetFormat(rgb_pixel_color); for(int j=0; j<150; ++j ) { - if (array_4FABD0[i].field_44[j].field_0 > 0) + if (array_4FABD0[i].effect_sparks[j].have_spark > 0) { if (j%2) - SetPixel(&array_4FABD0[i].field_44[j].field_4, v7); + SetPixel(&array_4FABD0[i].effect_sparks[j].spark_position, pixel_color); else - { - pXYZW.left = array_4FABD0[i].field_44[j].field_4.x; - pXYZW.right = pXYZW.left + 2; - pXYZW.top = array_4FABD0[i].field_44[j].field_4.y; - pXYZW.bottom = pXYZW.top + 2; - DrawRect(&pXYZW, v7, 1); - } + SetPixel2sq(&array_4FABD0[i].effect_sparks[j].spark_position, pixel_color); } } } @@ -2242,8 +1895,8 @@ RECT pSrcRect; // [sp+Ch] [bp-18h]@1 POINT pTargetXY; // [sp+1Ch] [bp-8h]@1 //resources rectangles + pSrcRect.left = 765; pSrcRect.top = 0; - pSrcRect.left = 765; pSrcRect.right = 843; pSrcRect.bottom = 216; @@ -2257,8 +1910,8 @@ //players name rectangle pSrcRect.left = 283; + pSrcRect.top = 166; pSrcRect.right = 361; - pSrcRect.top = 166; pSrcRect.bottom = 190; pTargetXY.x = 8; pTargetXY.y = 13; @@ -2268,10 +1921,10 @@ pTargetXY.y = 13; Blt_Chroma(&pSrcRect, &pTargetXY, pArcomageGame->field_54, 2); - //tower heigth rectangle + //tower height rectangle pSrcRect.left = 234; + pSrcRect.top = 166; pSrcRect.right = 283; - pSrcRect.top = 166; pSrcRect.bottom = 190; pTargetXY.x = 100; pTargetXY.y = 296; @@ -2281,10 +1934,10 @@ pTargetXY.y = 296; Blt_Chroma(&pSrcRect, &pTargetXY, pArcomageGame->field_54, 2); - //wall heigth rectangle - pSrcRect.left = 192; + //wall height rectangle + pSrcRect.left = 192; + pSrcRect.top = 166; pSrcRect.right = 234; - pSrcRect.top = 166; pSrcRect.bottom = 190; pTargetXY.x = 168; pTargetXY.y = 296; @@ -2303,7 +1956,7 @@ char text_buff[32]; // [sp+Ch] [bp-28h]@2 POINT text_position; // [sp+2Ch] [bp-8h]@2 - if ( am_byte_4FAA77 ) + if ( need_to_discard_card ) { strcpy(text_buff, pGlobalTXT_LocalizationStrings[266]);// DISCARD A CARD text_position.x = 320 - pArcomageGame->pfntArrus->GetLineWidth(text_buff) / 2; @@ -2345,7 +1998,7 @@ pPrimaryWindow_draws_text(-1, text_buff, &text_position); res_value = am_Players[0].quarry_level; - if ( byte_4E185E ) + if ( use_start_bonus ) res_value =am_Players[0].quarry_level + quarry_bonus; intToString(res_value, text_buff); text_position.x = 14;// - 6 * 0 / 2; @@ -2353,7 +2006,7 @@ DrawPlayerLevels(-1, text_buff, &text_position); res_value = am_Players[1].quarry_level; - if ( byte_4E185E ) + if ( use_start_bonus ) res_value = am_Players[1].quarry_level + quarry_bonus; intToString(res_value, text_buff); // v2 = 0; @@ -2362,7 +2015,7 @@ DrawPlayerLevels(-1, text_buff, &text_position); res_value = am_Players[0].magic_level; - if ( byte_4E185E ) + if ( use_start_bonus ) res_value = am_Players[0].magic_level + magic_bonus; intToString(res_value, text_buff); // v4 = 0; @@ -2371,8 +2024,8 @@ DrawPlayerLevels(-1, text_buff, &text_position); res_value = am_Players[1].magic_level; - if ( byte_4E185E ) - res_value = am_Players[1].magic_level+magic_bonus; + if ( use_start_bonus ) + res_value = am_Players[1].magic_level + magic_bonus; intToString(res_value, text_buff); // v6 = 0; text_position.y = 164; @@ -2380,7 +2033,7 @@ DrawPlayerLevels(-1, text_buff, &text_position); res_value = am_Players[0].zoo_level; - if ( byte_4E185E ) + if ( use_start_bonus ) res_value = am_Players[0].zoo_level + zoo_bonus; intToString(res_value, text_buff); // v8 = 0; @@ -2389,7 +2042,7 @@ DrawPlayerLevels(-1, text_buff, &text_position); res_value = am_Players[1].zoo_level; - if ( byte_4E185E ) + if ( use_start_bonus ) res_value = am_Players[1].zoo_level + zoo_bonus; intToString(res_value, text_buff); // v10 = 0; @@ -2652,7 +2305,7 @@ v3 = 100; - if ( am_Players[1].wall_height <= 0 ) + if ( am_Players[1].wall_height > 0 ) { pSrcXYZW.top = 0; @@ -2704,11 +2357,11 @@ while ( v2 < v0 ) { v3 = current_player_num; - if ( am_byte_4E185D != 0 ) + if ( am_byte_4E185D) { - pTargetXY.x += am_Players[current_player_num].arr_6C[v2].field_0 ; - pTargetXY.y += am_Players[current_player_num].arr_6C[v2].field_4; + pTargetXY.x += am_Players[current_player_num].card_shift[v2].x ; + pTargetXY.y += am_Players[current_player_num].card_shift[v2].y; } v7 = am_Players[current_player_num].cards_at_hand[v2]; if ( v7 == -1 ) @@ -2740,10 +2393,10 @@ v3 = current_player_num; pTargetXY.x += v24 + 96; LABEL_15: - if ( am_byte_4E185D != 0 ) + if ( am_byte_4E185D ) { - pTargetXY.x -= am_Players[current_player_num].arr_6C[v2].field_0 ; - pTargetXY.y -= am_Players[current_player_num].arr_6C[v2].field_4 ; + pTargetXY.x -= am_Players[current_player_num].card_shift[v2].x ; + pTargetXY.y -= am_Players[current_player_num].card_shift[v2].y ; } ++v2; } @@ -2852,8 +2505,8 @@ { // v3 = 188 * current_player_num + 8 * amuint_4FAA4C; // amuint_4FAA3C_blt_xy.x = (amuint_4FAA4C * v2 + *(am_Players[0].arr_6C[0] + v3) - 120) / 10; - amuint_4FAA3C_blt_xy.x=(amuint_4FAA4C * v2 + am_Players[current_player_num].arr_6C[amuint_4FAA4C].field_0-120)/10; - v4 = (am_Players[current_player_num].arr_6C[amuint_4FAA4C].field_4+309) /10;//(*(&am_Players[0].arr_6C[0][1] + v3) + 309) / 10; + amuint_4FAA3C_blt_xy.x=(amuint_4FAA4C * v2 + am_Players[current_player_num].card_shift[amuint_4FAA4C].x-120)/10; + v4 = (am_Players[current_player_num].card_shift[amuint_4FAA4C].y+309) /10;//(*(&am_Players[0].arr_6C[0][1] + v3) + 309) / 10; } else { @@ -2965,17 +2618,7 @@ if (shown_cards[v17].uCardId==-1) break; } - /* v17 = 0; - do - { - if ( v7->uCardId == -1 ) - break; - ++v7; - ++v17; - } - while ( v7 < &dword_4FABB8 );*/ - // v26 = 32 * v17; - + amuint_4FAA54_blt_xy.x = (shown_cards[v17].field_8.x - 272) / 5; amuint_4FAA54_blt_xy.y = (shown_cards[v17].field_8.y - 173) / 5; pArcomageGame->GetCardRect(played_card_id, &pSrcXYZW); @@ -3058,7 +2701,7 @@ //----- (0040BB67) -------------------------------------------------------- signed int DrawCardsRectangles( int player_num ) { - +//need do fix rectangle not fit to card //int v1; // esi@1 signed int result; // eax@1 @@ -3139,8 +2782,8 @@ if ( am_byte_4E185D ) { // v9 = v3 + 8 * v7; - v10 = am_Players[player_num].arr_6C[v7].field_0;//*(am_player[0].arr_6C[0] + v9); - v11 = am_Players[player_num].arr_6C[v7].field_4;//*(&am_player[0].arr_6C[0][1] + v9); + v10 = am_Players[player_num].card_shift[v7].x;//*(am_player[0].arr_6C[0] + v9); + v11 = am_Players[player_num].card_shift[v7].y;//*(&am_player[0].arr_6C[0][1] + v9); pXYZW.left += v10; pXYZW.right += v10; pXYZW.top += v11; @@ -3156,8 +2799,8 @@ pXYZW.right += var18; if ( am_byte_4E185D ) { - v16 = am_Players[player_num].arr_6C[v30].field_0;//*(am_player[0].arr_6C[0] + v15); - v17 = am_Players[player_num].arr_6C[v30].field_4;//*(&am_player[0].arr_6C[0][1] + v15); + v16 = am_Players[player_num].card_shift[v30].x;//*(am_player[0].arr_6C[0] + v15); + v17 = am_Players[player_num].card_shift[v30].y;//*(&am_player[0].arr_6C[0][1] + v15); pXYZW.left -= v16; pXYZW.right -= v16; pXYZW.top -= v17; @@ -3192,7 +2835,7 @@ // 4E185D: using guessed type char am_byte_4E185D; //----- (0040BCFB) -------------------------------------------------------- -bool am_40BCFB( int player_num, signed int card_slot_index ) +bool DiscardCard( int player_num, signed int card_slot_index ) { int v2; // esi@2 signed int v3; // edi@2 @@ -3224,13 +2867,13 @@ } } - if ( pCards[am_Players[player_num].cards_at_hand[i]].field_2B) + if ( pCards[am_Players[player_num].cards_at_hand[i]].can_be_discarded) { ArcomageGame::PlaySound(22); v8 = GetPlayerHandCardCount(current_player_num); - v10=am_Players[player_num].arr_6C[i].field_0 + (640 - 96 * v8) / (v8 + 1); + v10=am_Players[player_num].card_shift[i].x + (640 - 96 * v8) / (v8 + 1); amuint_4FAA5C_blt_xy.x = v10; - amuint_4FAA5C_blt_xy.y = am_Players[player_num].arr_6C[i].field_4 + 327;//v11; + amuint_4FAA5C_blt_xy.y = am_Players[player_num].card_shift[i].y + 327;//v11; v12 = 0; if ( !am_byte_4FAA75 ) @@ -3244,48 +2887,42 @@ pArcomageGame->field_F6 = 1; amuint_4FAA54_blt_xy.x = (shown_cards[v12].field_8.x - v10) / 10; amuint_4FAA54_blt_xy.y = (shown_cards[v12].field_8.y - 327) / 10; - uCardID = am_Players[player_num].cards_at_hand[i]; am_Players[player_num].cards_at_hand[i] = -1; - am_byte_4FAA77 = 0; + need_to_discard_card = 0; return true; } else return false; } -// 4FAA75: using guessed type char am_byte_4FAA75; -// 4FAA77: using guessed type char am_byte_4FAA77; -// 4FAA78: using guessed type int amuint_4FAA78[]; -// 4FAA80: using guessed type int amuint_4FAA80[]; -// 4FAA84: using guessed type int amuint_4FAA84[]; -// 4FABB8: using guessed type int dword_4FABB8; + //----- (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 - int v6; // edi@2 + int card_index; // edi@2 int v7; // eax@2 int v8; // ebx@8 - int v9; // eax@8 + int cards_at_hand; // eax@8 int v10; // ebx@8 int v11; // ebp@8 int v12; // ecx@8 int v13; // eax@8 - ArcomageCard *v14; // eax@8 + ArcomageCard *pCard; // eax@8 int v15; // ecx@8 int v16; // ecx@8 if ( card_slot_num <= -1 ) return false; + v4 = 0; - - for (v6=0; v6<10; ++v6) + for (card_index=0; card_index<10; ++card_index) { - if ( am_Players[player_num].cards_at_hand[v6] != -1 ) + if ( am_Players[player_num].cards_at_hand[card_index] != -1 ) { if ( card_slot_num == v4 ) break; @@ -3293,29 +2930,29 @@ } } - result = CanCardBePlayed(player_num, v6); - if ( result ) + if (CanCardBePlayed(player_num, card_index) ) { ArcomageGame::PlaySound(23); - v9 = GetPlayerHandCardCount(current_player_num); - // v10 = 188 * v8 + 8 * v6; - // v11 = v6 + 47 * v3; + cards_at_hand = GetPlayerHandCardCount(current_player_num); pArcomageGame->field_F6 = 1; - v12 = am_Players[player_num].arr_6C[v6].field_0 + (640 - 96 * v9) / (v9 + 1)+ 96 * v6 +(640 - 96 * v9) / (v9 + 1); + v12 = am_Players[player_num].card_shift[card_index].x + + (640 - 96 * cards_at_hand) / (cards_at_hand + 1)+ + 96 * card_index ; + // v13 = *(int *)((char *)&am_Players[0].arr_6C[0][1] + v10) + 327; amuint_4FAA5C_blt_xy.x = v12;//v12; - amuint_4FAA5C_blt_xy.y = am_Players[player_num].arr_6C[v6].field_4 + 327;//v13; + amuint_4FAA5C_blt_xy.y = am_Players[player_num].card_shift[card_index].y + 327;//v13; amuint_4FAA54_blt_xy.x = (272 - v12) / 5; amuint_4FAA54_blt_xy.y = -30; - v14 = &pCards[am_Players[player_num].cards_at_hand[v6]]; - am_Players[player_num].resource_bricks -= v14->needed_bricks; - am_Players[player_num].resource_beasts -= v14->needed_beasts; - am_Players[player_num].resource_gems -= v14->needed_gems; - played_card_id = am_Players[player_num].cards_at_hand[v6]; - am_Players[player_num].cards_at_hand[v6] = -1; - return true;; + pCard = &pCards[am_Players[player_num].cards_at_hand[card_index]]; + am_Players[player_num].resource_bricks -= pCard->needed_bricks; + am_Players[player_num].resource_beasts -= pCard->needed_beasts; + am_Players[player_num].resource_gems -= pCard->needed_gems; + played_card_id = am_Players[player_num].cards_at_hand[card_index]; + am_Players[player_num].cards_at_hand[card_index] = -1; + return true; } else return false; @@ -3353,1962 +2990,643 @@ //----- (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; + v18 = v6 ^ v7; + goto LABEL_25; + case 3: + v8 = player->magic_level; + v7 = __OFSUB__(v8, enemy->magic_level); + v6 = v8 - enemy->magic_level < 0; + v18 = v6 ^ v7; + goto LABEL_25; + case 4: + v9 = player->zoo_level; + v7 = __OFSUB__(v9, enemy->zoo_level); + v6 = v9 - enemy->zoo_level < 0; + v18 = v6 ^ v7; + goto LABEL_25; + case 5: + v10 = player->quarry_level == enemy->quarry_level; + v18 = v10; + goto LABEL_25; + case 6: + v10 = player->magic_level == enemy->magic_level; + v18 = v10; + goto LABEL_25; + case 7: + v10 = player->zoo_level == enemy->zoo_level; + v18 = v10; + goto LABEL_25; + case 8: + v11 = player->quarry_level; + v14 = __OFSUB__(v11, enemy->quarry_level); + v12 = v11 == enemy->quarry_level; + v13 = v11 - enemy->quarry_level < 0; + v18 = !((v13 ^ v14) | v12); + goto LABEL_25; + case 9: + v15 = player->magic_level; + v14 = __OFSUB__(v15, enemy->magic_level); + v12 = v15 == enemy->magic_level; + v13 = v15 - enemy->magic_level < 0; + v18 = !((v13 ^ v14) | v12); + goto LABEL_25; + case 10: + v16 = player->zoo_level; + v14 = __OFSUB__(v16, enemy->zoo_level); + v12 = v16 == enemy->zoo_level; + v13 = v16 - enemy->zoo_level < 0; + v18 = !((v13 ^ v14) | v12); + goto LABEL_25; + case 11: + v10 = player->wall_height == 0; + v18 = v10; + goto LABEL_25; + case 12: + v17 = player->wall_height == 0; + v18 = !v17; + goto LABEL_25; + case 13: + v10 = enemy->wall_height == 0; + v18 = v10; + goto LABEL_25; + case 14: + v17 = enemy->wall_height == 0; + v18 = !v17; + goto LABEL_25; + case 15: + v19 = player->wall_height; + v7 = __OFSUB__(v19, enemy->wall_height); + v6 = v19 - enemy->wall_height < 0; + v18 = v6 ^ v7; + goto LABEL_25; + case 16: + v20 = player->tower_height; + v7 = __OFSUB__(v20, enemy->tower_height); + v6 = v20 - enemy->tower_height < 0; + v18 = v6 ^ v7; + goto LABEL_25; + case 17: + v10 = player->wall_height == enemy->wall_height; + v18 = v10; + goto LABEL_25; + case 18: + v10 = player->tower_height == enemy->tower_height; + 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; + v18 = !((v13 ^ v14) | v12); + goto LABEL_25; + case 20: + v22 = player->tower_height; + v14 = __OFSUB__(v22, enemy->tower_height); + v12 = v22 == enemy->tower_height; + v13 = v22 - enemy->tower_height < 0; + v18 = !((v13 ^ v14) | v12); +LABEL_25: + if ( v18 ) + goto LABEL_26; + goto LABEL_231; + default: +LABEL_26: + v23 = pCard->draw_extra_card_count; + v24 = 0; + dword_4FAA68 = v23 + (pCard->field_30 == 1); + dword_4FAA64 = v23; + if ( v23 > 0 ) + { + do + { + GetNextCardFromDeck(player_num); + ++v24; + } + while ( v24 < pCard->draw_extra_card_count ); + } + + need_to_discard_card = 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 ); + } + + need_to_discard_card = 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 + } //----- (0040D2B4) -------------------------------------------------------- -int am_40D2B4( POINT* a1, int a2 ) +int am_40D2B4( POINT* startXY, int effect_value ) { int v2; // ebp@1 POINT *v3; // edi@1 @@ -5319,14 +3637,14 @@ v11 = 0; - v2 = a2; - v3 = a1; - while ( array_4FABD0[v11].field_0 ) + v2 = effect_value; + + while ( array_4FABD0[v11].have_effect ) { result = array_4FABD0[v11].field_40->_40E2A7(); if ( !result ) { - array_4FABD0[v11].field_0 = 0; + array_4FABD0[v11].have_effect = 0; --v11; } ++v11; @@ -5334,20 +3652,20 @@ return result; } v6 = v11; - array_4FABD0[v11].field_0 = 1; - if ( v2 <= 0 ) + array_4FABD0[v11].have_effect = 1; + if ( effect_value <= 0 ) { - array_4FABD0[v6].field_1 = 0; - v2 = -v2; + array_4FABD0[v6].effect_sign = 0; + effect_value = -effect_value; } else { - array_4FABD0[v6].field_1 = 1; + array_4FABD0[v6].effect_sign = 1; } - array_4FABD0[v6].field_4.field_0 = v3->x - 20; - array_4FABD0[v6].field_4.field_8 = v3->x + 20; - array_4FABD0[v6].field_4.field_4 = v3->y - 20; - array_4FABD0[v6].field_4.field_C = v3->y + 20; + array_4FABD0[v6].field_4.effect_area.left = startXY->x - 20; + array_4FABD0[v6].field_4.effect_area.right = startXY->x + 20; + array_4FABD0[v6].field_4.effect_area.top = startXY->y - 20; + array_4FABD0[v6].field_4.effect_area.bottom = startXY->y + 20; array_4FABD0[v6].field_4.field_10 = -60; array_4FABD0[v6].field_4.field_14 = 60; array_4FABD0[v6].field_4.field_18 = 180; @@ -5358,17 +3676,17 @@ array_4FABD0[v6].field_4.field_2Cf = 8.0; array_4FABD0[v6].field_4.field_30 = 5; array_4FABD0[v6].field_4.field_34 = 15; - array_4FABD0[v6].field_4.field_38 = &array_4FABD0[v6].field_44[0]; + array_4FABD0[v6].field_4.sparks_array = &array_4FABD0[v6].effect_sparks[0]; v8 = array_4FABD0[v6].field_40; - v8->_40E01A(&array_4FABD0[v6].field_4); - if ( 10 * v2 > 150 ) - v2 = 15; + v8->StartFill(&array_4FABD0[v6].field_4); + if ( 10 * effect_value > 150 ) + effect_value = 15; if ( v8->signature != SIG_trpg ) return 2; if ( !v8->field_59 ) return 3; - v8->field_8 = 10 * v2; + v8->position_in_sparks_arr = 10 * effect_value; v8->field_30 = 0.0; v8->field_58 = 0; v8->field_44 = 0; @@ -5376,13 +3694,13 @@ v8->field_48 = 0; v8->field_50 = 0; for (int i=0; i<v8->field_4; ++i) - v8->field_54[i].field_0=0; + v8->field_54[i].have_spark=0; return 0; } //----- (0040D402) -------------------------------------------------------- -int am_40D402( int player_num, int damage ) +int ApplyDamageToBuildings( int player_num, int damage ) { ArcomagePlayer *v2; // ecx@1 int v3; // esi@1 @@ -5687,9 +4005,8 @@ for (int i=0; i<12; ++i) am_sounds[i] = pSoundList->LoadSound(v4++, 0); - for (int i=0; i<10; ++i) - array_4FABD0[i].field_40->Ctor(array_4FABD0[i].field_40); + stru272_stru0::Ctor(&array_4FABD0[i].field_40); current_card_slot_index = -1; amuint_4FAA4C = -1; @@ -5698,7 +4015,7 @@ byte_4FAA2C = 0; byte_505880 = 0; dword_4FAA70 = 0; - am_byte_4FAA77 = 0; + need_to_discard_card = 0; SetStartGameData(); InitalHandsFill(); //nullsub_1(); @@ -5719,14 +4036,10 @@ } - - - - //----- (00409BE8) -------------------------------------------------------- void SetStartConditions() { - ArcomageStartConditions *st_cond; // eax@1 + const ArcomageStartConditions *st_cond; // eax@1 st_cond = &start_conditions[window_SpeakInHouse->par1C - 108]; start_tower_height = st_cond->tower_height; @@ -5741,7 +4054,7 @@ max_tower_height = st_cond->max_tower; max_resources_amount = st_cond->max_resources; - dword_4DF3A4 = st_cond->field_14; + opponent_mastery = st_cond->mastery_lvl; start_bricks_amount = st_cond->bricks_amount; start_gems_amount = st_cond->gems_amount; @@ -5753,14 +4066,12 @@ //----- (0040D75D) -------------------------------------------------------- void pPrimaryWindow_draws_text( int a1, const char *pText, POINT *pXY ) { - int v4; // qax@1 - v4 = pFontComic->uFontHeight - 3; - pPrimaryWindow->DrawText( pFontComic, pXY->x, pXY->y - (v4 >> 1) + 3, 0, pText, 0, 0, 0); + pPrimaryWindow->DrawText( pFontComic, pXY->x, pXY->y - ((pFontComic->uFontHeight - 3) >> 1) + 3, 0, pText, 0, 0, 0); } //----- (0040DB27) -------------------------------------------------------- -void __fastcall DrawRect(RECT *pXYZW, unsigned __int16 uColor, char bSolidFill) +void DrawRect( RECT *pXYZW, unsigned __int16 uColor, char bSolidFill ) { RECT *v3; // esi@1 @@ -5782,6 +4093,23 @@ pRenderer->EndScene(); } +void SetPixel2sq( POINT *pTargetXY, unsigned __int16 uColor ) + { + pRenderer->BeginScene(); + if ( pRenderer->uNumSceneBegins ) + { + int xVal = pTargetXY->x; + int yVal = pTargetXY->y; + if ( xVal >= 0 && xVal <= 639 && yVal >= 0 && yVal <= 479) + { + pRenderer->pTargetSurface[xVal + pRenderer->uTargetSurfacePitch * yVal] = uColor; + pRenderer->pTargetSurface[xVal+1 + pRenderer->uTargetSurfacePitch * yVal] = uColor; + pRenderer->pTargetSurface[xVal + pRenderer->uTargetSurfacePitch * (yVal+1)] = uColor; + pRenderer->pTargetSurface[xVal+1 + pRenderer->uTargetSurfacePitch * (yVal+1)] = uColor; + } + pRenderer->EndScene(); + } + } //----- (0040DBD3) -------------------------------------------------------- void SetPixel( POINT *pTargetXY, unsigned __int16 uColor ) @@ -5801,9 +4129,9 @@ //----- (0040DDB1) -------------------------------------------------------- -int __fastcall rand_interval(int a, int b) +int rand_interval( int min, int max ) { - return a + rand() % (b - a + 1); + return min + rand() % (max - min + 1); }