Mercurial > mm7
diff Arcomage.cpp @ 1184:a90dc4aee8f4
arcomage refactoring continued
author | Gloval |
---|---|
date | Thu, 06 Jun 2013 08:33:43 +0400 |
parents | fa30ea497e94 |
children | 24454b5c9268 |
line wrap: on
line diff
--- a/Arcomage.cpp Thu Jun 06 00:58:07 2013 +0400 +++ b/Arcomage.cpp Thu Jun 06 08:33:43 2013 +0400 @@ -102,8 +102,8 @@ {100, 300, 50, 50, 5, 3, 5, 20, 10, 20, 0} }; - - +#define SIG_trpg 0x67707274 +#define SIG_xxxx 0x78787878 ArcomageGame *pArcomageGame = new ArcomageGame; ArcomageCard pCards[87]; @@ -111,7 +111,7 @@ Acromage_st1 struct_st1[10]; -stru272 array_4FAC10[10]; +stru272 array_4FABD0[10]; @@ -168,7 +168,204 @@ return a1->x >= pXYZW->x && a1->x <= pXYZW->z && (v2 = a1->y, v2 >= pXYZW->y) && v2 <= pXYZW->w; } - +//----- (0040DFD1) -------------------------------------------------------- +void stru272_stru0::_40DFD1(stru272_stru0 *a1) + { + stru272_stru0 *v2; // eax@1 + v2 = (stru272_stru0 *)malloc(0x5Cu); + a1 = v2; + v2->signature = SIG_trpg; + v2->field_8 = 0; + v2->field_30 = 0.0; + v2->field_58 = 0; + v2->field_59 = 0; + } + +//----- (0040DFFE) -------------------------------------------------------- +int stru272_stru0::_40DFFE() + { + + if ( this->signature == SIG_trpg ) + { + this->signature = SIG_xxxx; + free(this); + return 0; + } + else + return 2; + + } + +//----- (0040E01A) -------------------------------------------------------- +int stru272_stru0::_40E01A(int a2) + { + signed int result; // eax@2 + + auto a1 = this; + if ( a1->signature == SIG_trpg ) + { + a1->field_4 = *(int *)(a2 + 32); + a1->field_C = *(int *)a2 << 16; + a1->field_10 = *(int *)(a2 + 4) << 16; + a1->field_14 = *(int *)(a2 + 8) << 16; + a1->field_18 = *(int *)(a2 + 12) << 16; + a1->field_1C = *(int *)(a2 + 16); + a1->field_20 = *(int *)(a2 + 20); + a1->field_24 = *(int *)(a2 + 24); + a1->field_28 = *(float *)(a2 + 28) * 65536.0; + LODWORD(a1->field_2C) = *(int *)(a2 + 36); + a1->field_34 = (signed __int64)(*(float *)(a2 + 40) * 65536.0); + a1->field_38 = (signed __int64)(*(float *)(a2 + 44) * 65536.0); + a1->field_3C = *(int *)(a2 + 48); + a1->field_40 = *(int *)(a2 + 52); +// a1->field_54 = *(int *)(a2 + 56); + a1->field_59 = 1; + result = 0; + } + else + { + result = 2; + } + return result; + } + +//----- (0040E0F5) -------------------------------------------------------- +int stru272_stru0::_40E0F5(char a2, char a3) + { + signed int result; // eax@2 + int v4; // edx@7 + int v5; // eax@7 + + auto a1 = this; + if ( a1->signature == SIG_trpg) + { + if ( a2 ) + { + a1->field_8 = 0; + a1->field_30 = 0.0; + } + if ( a1->field_59 && a3 ) + { + v4 = a1->field_4; + // v5 = a1->field_54; + do + { + *(int *)v5 = 0; + v5 += 28; + --v4; + } + while ( v4 ); + a1->field_58 = 0; + } + result = 0; + } + else + { + result = 2; + } + return result; + } + +//----- (0040E133) -------------------------------------------------------- +int stru272_stru0::_40E133() + { + stru272_stru0 *v1; // edi@1 + int v3; // ST18_4@3 + double v4; // st7@3 + double v5; // st6@4 + char v6; // bl@8 + int v7; // esi@8 + int v8; // ecx@10 + signed int v9; // eax@10 + int v10; // ecx@10 + signed int v11; // eax@10 + signed int v12; // edx@12 + signed int v13; // edx@12 + int v14; // [sp+8h] [bp-10h]@8 + int v15; // [sp+Ch] [bp-Ch]@8 + float v16; // [sp+14h] [bp-4h]@3 + + v1 = this; + if ( this->signature != SIG_trpg ) + return 2; + v3 = this->field_8; + v16 = this->field_30; + v4 = (double)v3; + if ( v3 > 0 ) + { + v5 = v16 + this->field_2C; + v16 = v5; + if ( v5 > v4 ) + v16 = v4; + } + if ( v16 >= 1.0 || this->field_58 ) + { + v6 = 0; + // v7 = this->field_54; + v14 = (signed __int64)this->field_28; + v15 = this->field_4; + while ( *(int *)v7 <= 0 ) + { + if ( v16 >= 1.0 ) + { + *(int *)v7 = v1->field_3C + rand() % (v1->field_40 - v1->field_3C + 1); + *(int *)(v7 + 20) = (rand() % 17 - 8) << 16; + *(int *)(v7 + 24) = (rand() % 17 - 8) << 16; + v12 = v1->field_C + rand() % (v1->field_14 - 1 - v1->field_C + 1); + *(int *)(v7 + 12) = v12; + *(int *)(v7 + 4) = v12 >> 16; + v16 = v16 - 1.0; + v13 = v1->field_10 + rand() % (v1->field_18 - 1 - v1->field_10 + 1); + *(int *)(v7 + 16) = v13; + *(int *)(v7 + 8) = v13 >> 16; + --v1->field_8; + goto LABEL_13; + } +LABEL_14: + v7 += 28; + --v15; + if ( !v15 ) + { + v1->field_58 = v6; + v1->field_30 = v16; + return 0; + } + } + v8 = *(int *)(v7 + 20); + --*(int *)v7; + v9 = v8 + *(int *)(v7 + 12); + v10 = v14 + *(int *)(v7 + 24); + *(int *)(v7 + 12) = v9; + *(int *)(v7 + 4) = v9 >> 16; + v11 = v10 + *(int *)(v7 + 16); + *(int *)(v7 + 24) = v10; + *(int *)(v7 + 16) = v11; + *(int *)(v7 + 8) = v11 >> 16; +LABEL_13: + v6 = 1; + goto LABEL_14; + } + return 0; + } + +//----- (0040E2A7) -------------------------------------------------------- +int stru272_stru0::_40E2A7() + { + int result; // eax@2 + + if ( this->signature == SIG_trpg ) + { + if ( this->field_8 <= 0 ) + result = this->field_58 != 0 ? 2 : 0; + else + result = 1; + } + else + { + result = 3; + } + return result; + } //----- (0040DFAF) -------------------------------------------------------- @@ -1370,14 +1567,11 @@ } pVideoPlayer->BinkUpdatePalette(dword_4FAA28); - /*v3 = array_4FAC10; - do - { - v3->ptr_0->_40E0F5(1, 1); - v3->ptr_0->_40DFFE(); - ++v3; - } - while ( (signed int)v3 < (signed int)&unk_5052C8 );*/ + for(int i=0; i<10; ++i) + { + array_4FABD0[i].field_40->_40E0F5(1,1); + array_4FABD0[i].field_40->_40DFFE(); + } pArcomageGame->pGameBackground.Release(); pArcomageGame->pSprites.Release(); @@ -1567,7 +1761,7 @@ *v7 = 1; dword_505314[v4] = dword_505554[v6]; result = byte_5054E8[v6]; - array_4FAC10[9].field_4[v4++ + 4232] = result;//затирает pArcomageGame + //array_4FABD0[9].field_4[v4++ + 4232] = result;//затирает pArcomageGame } while ( v4 < 108 ); dword_4FABC8 = 0; @@ -1616,11 +1810,11 @@ am_40A198(); v2 = dword_4FABC8; } - if ( !array_4FAC10[9].field_4[v2 + 4232] ) + /*if ( !array_4FABD0[9].field_4[v2 + 4232] ) { v3 = dword_505314[v2]; v5 = 1; - } + }*/ ++v2; dword_4FABC8 = v2; } @@ -2054,7 +2248,7 @@ am_EndScene(); am_BeginScene(pArcomageGame->pSpritesPixels, -1, 1); am_40B76F(v1); - v2 = (stru272_stru0 **)array_4FAC10; + v2 = (stru272_stru0 **)array_4FABD0; do { if ( *((unsigned char *)v2 - 64) ) @@ -2132,7 +2326,7 @@ } v0 += 4268; } - while ( v0 < (signed int)&array_4FAC10[9].field_4[4201] ); + while ( v0 < 1);//(signed int)&array_4FABD0[9].field_4[4201] ); } //----- (0040AB0A) -------------------------------------------------------- @@ -5342,7 +5536,7 @@ v2 = a2; v3 = a1; v4 = byte_4FABD0; - v12 = (stru272_stru0 **)array_4FAC10; + v12 = (stru272_stru0 **)array_4FABD0; while ( *v4 ) { result = (*v12)->_40E2A7(); @@ -5374,7 +5568,7 @@ dword_4FABDC[v6 / 4] = v3->x + 20; dword_4FABD8[v6 / 4] = v3->y - 20; dword_4FABE0[v6 / 4] = v3->y + 20; - v7 = array_4FAC10[v6 / 0x10AC].ptr_0; + // v7 = array_4FABD0[v6 / 0x10AC] dword_4FABE4[v6 / 4] = -60; dword_4FABE8[v6 / 4] = 60; dword_4FABEC[v6 / 4] = 180; @@ -5385,12 +5579,12 @@ dword_4FAC00[v6 / 4] = 0x41000000u; dword_4FAC04[v6 / 4] = 5; dword_4FAC08[v6 / 4] = 15; - dword_4FAC0C[v6 / 4] = (int)array_4FAC10[v6 / 0x10AC].field_4; + dword_4FAC0C[v6 / 4] = (int)array_4FABD0[v6 / 0x10AC].field_4; v7->_40E01A((int)((char *)&unk_4FABD4 + v6)); if ( 10 * v2 > 150 ) v2 = 15; - v8 = array_4FAC10[v6 / 0x10AC].ptr_0; - if ( v8->field_0 != 0x67707274 ) +// v8 = array_4FABD0[v6 / 0x10AC].ptr_0; + if ( v8->signature != SIG_trpg ) return 2; if ( !v8->field_59 ) return 3; @@ -5402,13 +5596,13 @@ v8->field_4C = 0; v8->field_48 = 0; v8->field_50 = 0; - v10 = v8->field_54; + /*v10 = v8->field_54; do { - *(unsigned int *)v10 = 0; - v10 += 28; - --v9; - } + *(unsigned int *)v10 = 0; + v10 += 28; + --v9; + }*/ while ( v9 ); return 0; } @@ -5739,14 +5933,10 @@ for (int i=0; i<12; ++i) am_sounds[i] = pSoundList->LoadSound(v4++, 0); - //v5 = array_4FAC10; - //do - //{ - // v5->_40DFD1(); - // ++v5; - //} - //while ( (signed int)v5 < 10 );//(signed int)&unk_5052C8 ); - + + for (int i=0; i<10; ++i) + array_4FABD0[i].field_40->_40DFD1(array_4FABD0[i].field_40); + dword_4FABBC = -1; amuint_4FAA4C = -1; byte_4FAA74 = 0;