SHARE
TWEET

FF8-chara.one algorithm pre-compile

MaKiPL Nov 2nd, 2018 78 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. int *__cdecl Field_CharaOne(int a1, int a2, int a3, int a4, const char *FieldFS_MapPath, int a6, int a7, char *a8, const char *a9, int a10, signed int a11, int a12, unsigned int a13, int a14, int a15, unsigned int a16)
  2. {
  3.   char *v16; // eax@1
  4.   signed int v17; // ecx@1
  5.   __int16 v18; // dx@3
  6.   __int16 v19; // ST48_2@3
  7.   int v20; // edx@3
  8.   int v21; // eax@3
  9.   char *v22; // edi@3
  10.   __int16 v23; // cx@3
  11.   int CharaOne_FD; // esi@3
  12.   _WORD *v25; // ecx@6
  13.   _DWORD *v26; // esi@6
  14.   char *v27; // ebx@6
  15.   int v28; // eax@7
  16.   char *v29; // edx@9
  17.   int v30; // ecx@10
  18.   unsigned int i; // eax@11
  19.   int v32; // eax@13
  20.   int v33; // eax@15
  21.   int v34; // ecx@15
  22.   int *v35; // edx@15
  23.   int v36; // eax@15
  24.   int v37; // edx@15
  25.   signed int v38; // eax@15
  26.   unsigned int v39; // ecx@15
  27.   int v40; // edx@16
  28.   int v41; // eax@18
  29.   signed int v42; // esi@19
  30.   int *v43; // ecx@20
  31.   int v44; // ecx@24
  32.   int v45; // eax@25
  33.   int v46; // edx@25
  34.   signed int v47; // edi@25
  35.   char v48; // cl@25
  36.   char v49; // cl@25
  37.   int v50; // ebp@25
  38.   const char *v51; // esi@26
  39.   __int16 v52; // cx@32
  40.   char v53; // zf@35
  41.   signed int v54; // ebp@36
  42.   char *v55; // ebx@38
  43.   void **v56; // esi@39
  44.   int v57; // eax@40
  45.   __int32 v58; // edx@42
  46.   char *v59; // eax@43
  47.   void *v60; // ecx@43
  48.   signed int v61; // edx@45
  49.   void *v62; // ecx@45
  50.   void **v63; // eax@46
  51.   void *v64; // ecx@49
  52.   unsigned __int8 v65; // sf@53
  53.   unsigned __int8 v66; // of@53
  54.   char *v67; // ebp@54
  55.   int v68; // eax@55
  56.   unsigned int v69; // ebx@58
  57.   int v70; // edx@59
  58.   int v71; // eax@59
  59.   char *v72; // edi@59
  60.   int v73; // ecx@59
  61.   char v74; // cl@59
  62.   char *v75; // edi@59
  63.   int v76; // esi@59
  64.   int v77; // edi@61
  65.   int v78; // eax@63
  66.   signed int v79; // esi@63
  67.   char *v80; // edx@63
  68.   _DWORD *v81; // ecx@64
  69.   int v82; // ebp@68
  70.   unsigned int v83; // esi@73
  71.   int v84; // ebx@75
  72.   char v85; // dl@75
  73.   void **v86; // eax@76
  74.   int v87; // ecx@77
  75.   int v88; // ebp@78
  76.   int v89; // edi@78
  77.   void **v90; // edi@78
  78.   signed int v91; // ebx@78
  79.   char *v92; // ecx@79
  80.   int v93; // ebx@86
  81.   int v94; // eax@87
  82.   signed int v95; // edi@88
  83.   int v96; // esi@89
  84.   int v97; // eax@92
  85.   int v98; // ecx@92
  86.   __int16 v99; // dx@92
  87.   int v100; // ebp@93
  88.   unsigned int *v101; // esi@93
  89.   __int16 v102; // ST28_2@93
  90.   unsigned int v103; // eax@93
  91.   int v104; // ebx@93
  92.   int v105; // ebp@93
  93.   signed int v106; // ST24_4@93
  94.   __int16 v107; // ax@93
  95.   unsigned int v108; // ecx@93
  96.   int v109; // edx@93
  97.   unsigned int v110; // esi@95
  98.   unsigned int v111; // ecx@95
  99.   int v112; // ebp@95
  100.   __int64 v113; // rax@95
  101.   int v114; // esi@95
  102.   int v115; // edi@95
  103.   int v116; // ecx@95
  104.   int v117; // esi@99
  105.   int v118; // ecx@103
  106.   unsigned int v119; // ecx@107
  107.   int v120; // ecx@107
  108.   __int16 v121; // ax@109
  109.   char v122; // dl@109
  110.   unsigned int v123; // eax@109
  111.   int v124; // eax@110
  112.   int v125; // esi@112
  113.   signed int v126; // ebp@112
  114.   __int16 v127; // dx@112
  115.   int v128; // edi@113
  116.   __int16 v129; // dx@114
  117.   signed int v130; // esi@117
  118.   int *result; // eax@118
  119.   __int16 *v132; // edi@118
  120.   __int16 v133; // cx@119
  121.   int v134; // [sp+1Ch] [bp-BB4h]@5
  122.   int v135; // [sp+20h] [bp-BB0h]@6
  123.   int v136; // [sp+24h] [bp-BACh]@6
  124.   void *v137; // [sp+28h] [bp-BA8h]@6
  125.   int v138; // [sp+28h] [bp-BA8h]@38
  126.   const char *v139; // [sp+2Ch] [bp-BA4h]@26
  127.   void **v140; // [sp+2Ch] [bp-BA4h]@39
  128.   int Size; // [sp+30h] [bp-BA0h]@6
  129.   int *Sizea; // [sp+30h] [bp-BA0h]@36
  130.   int v143; // [sp+34h] [bp-B9Ch]@38
  131.   int v144; // [sp+34h] [bp-B9Ch]@54
  132.   int v145; // [sp+34h] [bp-B9Ch]@85
  133.   int v146; // [sp+38h] [bp-B98h]@8
  134.   int v147; // [sp+38h] [bp-B98h]@55
  135.   _WORD *v148; // [sp+38h] [bp-B98h]@76
  136.   _WORD *v149; // [sp+38h] [bp-B98h]@86
  137.   int v150; // [sp+3Ch] [bp-B94h]@0
  138.   _WORD *v151; // [sp+3Ch] [bp-B94h]@93
  139.   int v152; // [sp+40h] [bp-B90h]@0
  140.   signed int v153; // [sp+40h] [bp-B90h]@85
  141.   int v154; // [sp+44h] [bp-B8Ch]@1
  142.   int v155; // [sp+44h] [bp-B8Ch]@76
  143.   int *v156; // [sp+44h] [bp-B8Ch]@86
  144.   __int16 v157; // [sp+48h] [bp-B88h]@0
  145.   void **v158; // [sp+48h] [bp-B88h]@86
  146.   int v159; // [sp+4Ch] [bp-B84h]@61
  147.   int v160; // [sp+4Ch] [bp-B84h]@75
  148.   int v161; // [sp+4Ch] [bp-B84h]@86
  149.   void **v162; // [sp+50h] [bp-B80h]@86
  150.   int *v163; // [sp+54h] [bp-B7Ch]@1
  151.   unsigned __int16 v164; // [sp+58h] [bp-B78h]@0
  152.   int v165; // [sp+64h] [bp-B6Ch]@89
  153.   int v166; // [sp+68h] [bp-B68h]@0
  154.   signed int v167; // [sp+6Ch] [bp-B64h]@88
  155.   signed int v168; // [sp+70h] [bp-B60h]@93
  156.   int v169; // [sp+74h] [bp-B5Ch]@93
  157.   int v170; // [sp+7Ch] [bp-B54h]@93
  158.   int v171; // [sp+80h] [bp-B50h]@93
  159.   int v172; // [sp+84h] [bp-B4Ch]@93
  160.   int v173; // [sp+88h] [bp-B48h]@1
  161.   int v174; // [sp+8Ch] [bp-B44h]@93
  162.   __int16 v175[2]; // [sp+98h] [bp-B38h]@93
  163.   char v176[24]; // [sp+9Ch] [bp-B34h]@16
  164.   char v177[28]; // [sp+B4h] [bp-B1Ch]@111
  165.   char v178[12]; // [sp+D0h] [bp-B00h]@3
  166.   char v179; // [sp+DCh] [bp-AF4h]@25
  167.   char v180; // [sp+DDh] [bp-AF3h]@25
  168.   char v181; // [sp+DEh] [bp-AF2h]@25
  169.   char v182; // [sp+DFh] [bp-AF1h]@25
  170.   char v183; // [sp+E0h] [bp-AF0h]@25
  171.   char v184; // [sp+E8h] [bp-AE8h]@59
  172.   char v185; // [sp+E9h] [bp-AE7h]@59
  173.   char v186; // [sp+EAh] [bp-AE6h]@59
  174.   char v187; // [sp+EBh] [bp-AE5h]@59
  175.   char v188[12]; // [sp+1E8h] [bp-9E8h]@59
  176.   char v189; // [sp+1F4h] [bp-9DCh]@60
  177.   char v190; // [sp+2D2h] [bp-8FEh]@1
  178.   __int16 v191; // [sp+2DCh] [bp-8F4h]@32
  179.   __int16 v192; // [sp+2DEh] [bp-8F2h]@32
  180.   __int16 v193[10]; // [sp+2E0h] [bp-8F0h]@32
  181.   __int16 v194; // [sp+2F4h] [bp-8DCh]@95
  182.   __int16 v195; // [sp+2F6h] [bp-8DAh]@99
  183.   __int16 v196[236]; // [sp+2F8h] [bp-8D8h]@103
  184.   CHAR FileName; // [sp+4D0h] [bp-700h]@3
  185.   CHAR v198; // [sp+4DCh] [bp-6F4h]@4
  186.   char v199; // [sp+4E8h] [bp-6E8h]@37
  187.   char v200; // [sp+5DEh] [bp-5F2h]@6
  188.   char buffer; // [sp+7DCh] [bp-3F4h]@5
  189.   char v202; // [sp+7E0h] [bp-3F0h]@9
  190.  
  191.   v163 = &v173;
  192.   v154 = 0;
  193.   v16 = &v190;
  194.   v17 = 64;
  195.   do
  196.   {
  197.     *(v16 - 1) = 0;
  198.     *v16 = 0;
  199.     *(v16 + 1) = 0;
  200.     v16 += 8;
  201.     --v17;
  202.   }
  203.   while ( v17 );
  204.   v18 = *(a6 + 6);
  205.   v19 = *(a6 + 5);
  206.   LOWORD(v150) = *(a6 + 7);
  207.   strcpy(v178, FieldFS_MapPath);
  208.   v20 = dword_B9242C;
  209.   *&v178[strlen(v178)] = word_B92428;
  210.   v22 = &v178[strlen(v178) + 1];
  211.   v21 = dword_B92430;
  212.   v23 = word_B92434;
  213.   *--v22 = v20;
  214.   *(v22 + 1) = v21;
  215.   *(v22 + 4) = v23;
  216.   strcpy(&FileName, v178);                      // This has path to chara.one
  217.   CharaOne_FD = OpenFile(&FileName, 0, 0);
  218.   if ( CharaOne_FD == -1 )
  219.   {
  220.     sprintf(byte_1DCB3C0, aCannotLoadS, &v198); // Casual debug error
  221.     OutputDebugStringA(byte_1DCB3C0);
  222.   }
  223.   File_Seek(CharaOne_FD, 0, 0);                 // What the hell Square?
  224.   File_Read(CharaOne_FD, &buffer, 1024);        // This reads data from temp.fs instead; yet it has pre-loaded chara.one buffer before, so I don't know...
  225.   File_Close(CharaOne_FD);
  226.   memset(off_1DCAF28, 0xFFu, sizeof(off_1DCAF28));
  227.   v134 = 0;
  228.   memset(byte_1DC308C, 0, 0x40u);
  229.   if ( byte_1D9D019 > 0 )
  230.   {
  231.     v25 = (dword_1D9CF88 + 536);
  232.     v26 = &unk_1DCA32C;
  233.     Size = dword_1D9CF88 + 536;
  234.     v135 = 0;
  235.     v27 = &v200;
  236.     v137 = &unk_1DCA32C;
  237.     v136 = byte_1D9D019;
  238.     do
  239.     {
  240.       LOWORD(v28) = *v25;
  241.       if ( *v25 != -1 )
  242.       {
  243.         v28 = v28;
  244.         v146 = v28;
  245.         if ( off_1DCAF28[v28] == -1 )
  246.         {
  247.           off_1DCAF28[v28] = v134;
  248.           v29 = &v202;
  249.           if ( v28 > 0 )
  250.           {
  251.             v30 = v28;
  252.             do
  253.             {
  254.               for ( i = *v29 & 0xF0000000; i != -805306368; i = v32 & 0xF0000000 )
  255.               {
  256.                 if ( i == -268435456 )
  257.                   break;
  258.                 v32 = *(v29 + 1);
  259.                 v29 += 4;
  260.               }
  261.               v29 += 20;
  262.               --v30;
  263.             }
  264.             while ( v30 );
  265.           }
  266.           v33 = *v29;
  267.           v34 = *(v29 + 1);
  268.           v35 = (v29 + 8);
  269.           *(v26 - 1) = v33 + 4;
  270.           *v26 = v34;
  271.           v36 = *v35;
  272.           v37 = (v35 + 1);
  273.           v26[1] = v36;
  274.           v38 = *v37;
  275.           v39 = *v37 & 0xF0000000;
  276.           if ( v39 == -805306368 )
  277.           {
  278.             v40 = v37 + 4;
  279.             v26[2] = v38;
  280.             v176[v134] = v38 >> 16;
  281.             *(v137 + 10) = *v40;
  282.             memset(v137 + 12, 0xFFu, 0x18u);
  283.           }
  284.           else if ( v39 == -1610612736 )
  285.           {
  286.             v26[3] = v38;
  287.             v41 = (v26 + 4);
  288.             *v41 = -1;
  289.             v40 = v37 + 8;
  290.             *(v41 + 4) = -1;
  291.             *(v41 + 8) = -1;
  292.             *(v41 + 12) = -1;
  293.             *(v41 + 16) = -1;
  294.             v26[9] = *v40;
  295.             v26[2] = -1;
  296.             v176[v134] = 16;
  297.           }
  298.           else
  299.           {
  300.             v26[2] = -1;
  301.             v42 = 0;
  302.             v176[v134] = 16;
  303.             if ( v38 < 0 )
  304.               goto LABEL_127;
  305.             v43 = (v137 + 12);
  306.             do
  307.             {
  308.               v37 += 4;
  309.               *v43 = v38 & 0xFFFFFFF;
  310.               ++v42;
  311.               v38 = *v37;
  312.               ++v43;
  313.             }
  314.             while ( *v37 >= 0 );
  315.             if ( v42 < 6 )
  316. LABEL_127:
  317.               memset((4 * (v42 + v135) + 31236920), 0xFFu, 4 * (6 - v42));
  318.             v44 = *(v37 + 4);
  319.             v40 = v37 + 4;
  320.             *(v137 + 9) = v44;
  321.           }
  322.           v45 = *(v40 + 8);
  323.           v46 = v40 + 4;
  324.           v47 = 0;
  325.           *(v27 - 1) = v45;
  326.           *v27 = BYTE1(v45);
  327.           v48 = *v46;
  328.           *(v27 + 1) = BYTE2(v45);
  329.           v179 = v48;
  330.           *(v27 - 1) -= 128;
  331.           *v27 -= 128;
  332.           *(v27 + 1) -= 128;
  333.           v180 = *(v46 + 1);
  334.           v46 += 2;
  335.           v183 = 0;
  336.           v49 = *v46;
  337.           v182 = *(v46 + 1);
  338.           v181 = v49;
  339.           v50 = a11 / 8;
  340.           if ( a11 / 8 > 0 )
  341.           {
  342.             v51 = a9;
  343.             v139 = a9;
  344.             do
  345.             {
  346.               if ( v47 >= 64 )
  347.                 break;
  348.               if ( !strcmp(&v179, v51) )
  349.                 break;
  350.               ++v47;
  351.               v51 = v139 + 8;
  352.               v139 += 8;
  353.             }
  354.             while ( v47 < v50 );
  355.           }
  356.           if ( v47 == v50 || v47 == 64 )
  357.           {
  358.             *(&v191 + 4 * v146) = -128;
  359.             *(&v192 + 4 * v146) = -128;
  360.             v193[4 * v146] = v157 - 128;
  361.           }
  362.           else
  363.           {
  364.             *(&v191 + 4 * v146) = a9[8 * v47 + 5] - 128;
  365.             v52 = a9[8 * v47 + 7] - 128;
  366.             *(&v192 + 4 * v146) = a9[8 * v47 + 6] - 128;
  367.             v193[4 * v146] = v52;
  368.           }
  369.           ++v134;
  370.           v27 += 8;
  371.           v135 += 12;
  372.           v137 = v137 + 48;
  373.           v26 = v137;
  374.         }
  375.       }
  376.       v25 = (Size + 612);
  377.       v53 = v136 == 1;
  378.       Size += 612;
  379.       --v136;
  380.     }
  381.     while ( !v53 );
  382.   }
  383.   memset(off_1DCAF28, 0xFFu, sizeof(off_1DCAF28));
  384.   v54 = 4;
  385.   Sizea = OpenFile(&v198, 0, 0);
  386.   if ( Sizea == -1 )
  387.   {
  388.     sprintf(byte_1DCB3C0, aCannotLoadS_0, &v199);
  389.     OutputDebugStringA(byte_1DCB3C0);
  390.   }
  391.   v55 = a8;
  392.   v138 = 0;
  393.   v143 = 0;
  394.   if ( byte_1D9D019 )
  395.   {
  396.     v56 = &off_1DCA350;
  397.     v150 = dword_1D9CF88 + 536;
  398.     v140 = &off_1DCA338;
  399.     do
  400.     {
  401.       LOWORD(v57) = *v150;
  402.       if ( *v150 != -1 )
  403.       {
  404.         v57 = v57;
  405.         if ( off_1DCAF28[v57] == -1 )
  406.         {
  407.           v58 = *(v56 - 10);
  408.           off_1DCAF28[v57] = v138;
  409.           File_Seek(Sizea, v58, 0);
  410.           File_Read(Sizea, &a8[v54], *(v56 - 9));
  411.           if ( *(v56 - 7) == -1 )
  412.           {
  413.             v59 = *v56 + &a8[v54];
  414.             *v56 = v59;
  415.             v60 = *(v59 + 14);
  416.             v56[1] = v60;
  417.             *(v59 + 14) = *v56 + v60;
  418.             byte_1DC308C[v138] = -1;
  419.           }
  420.           else
  421.           {
  422.             v56[1] = &a8[v54];
  423.             byte_1DC308C[v138] = 13;
  424.           }
  425.           v61 = 0;
  426.           v62 = *v140;
  427.           if ( *v140 != -1 )
  428.           {
  429.             v63 = v56 - 6;
  430.             do
  431.             {
  432.               if ( (v62 & 0xF0000000) == -1610612736 )
  433.                 break;
  434.               if ( v61 >= 6 )
  435.                 break;
  436.               v64 = *v63;
  437.               ++v63;
  438.               ++v61;
  439.               *(v63 - 1) = &a8[v54] + (v64 & 0xFFFFFFF);
  440.               v62 = *v63;
  441.             }
  442.             while ( *v63 != -1 );
  443.           }
  444.           v54 += *(v56 - 9);
  445.           if ( a13 < &a8[v54] )
  446.             OutputDebugStringA(aLzk_read_mem_o);
  447.           ++v138;
  448.           v140 += 12;
  449.           v56 += 12;
  450.         }
  451.       }
  452.       v66 = __OFSUB__(v143 + 1, byte_1D9D019);
  453.       v65 = v143++ + 1 - byte_1D9D019 < 0;
  454.       v150 += 612;
  455.     }
  456.     while ( v65 ^ v66 );
  457.   }
  458.   File_Close(Sizea);
  459.   memset(off_1DCAF28, 0xFFu, sizeof(off_1DCAF28));
  460.   v67 = &a8[v54];
  461.   v144 = 0;
  462.   if ( byte_1D9D019 )
  463.   {
  464.     v68 = dword_1D9CF88 + 536;
  465.     v147 = dword_1D9CF88 + 536;
  466.     Sizea = &unk_1DCA334;
  467.     do
  468.     {
  469.       LOWORD(v68) = *v68;
  470.       if ( v68 != -1 )
  471.       {
  472.         v68 = v68;
  473.         if ( off_1DCAF28[v68] == -1 )
  474.         {
  475.           off_1DCAF28[v68] = 0;
  476.           v69 = unk_1DCA334;
  477.           if ( unk_1DCA334 != -1 )
  478.           {
  479.             v187 = 0;
  480.             v70 = *&aModelMain_chrD[4];
  481.             strcpy(v188, &byte_1CD2CAC);
  482.             v71 = *&aModelMain_chrD[8];
  483.             v72 = &v188[strlen(v188)];
  484.             *v72 = *aModelMain_chrD;
  485.             v73 = *&aModelMain_chrD[12];
  486.             *(v72 + 1) = v70;
  487.             LOBYTE(v70) = aModelMain_chrD[16];
  488.             *(v72 + 2) = v71;
  489.             *(v72 + 3) = v73;
  490.             v72[16] = v70;
  491.             v184 = v69 / 0x64 + 48;
  492.             v185 = v69 / 0xA + 48;
  493.             v186 = v69 % 0xA + 48;
  494.             strcat(v188, &v184);
  495.             v75 = &v188[strlen(v188) + 1];
  496.             v74 = a_mch[4];
  497.             *--v75 = *a_mch;
  498.             v75[4] = v74;
  499.             v76 = OpenFile(v188, 0, 0);
  500.             if ( v76 == -1 )
  501.             {
  502.               sprintf(byte_1DCB3C0, aCannotLoadS_1, &v189);
  503.               OutputDebugStringA(byte_1DCB3C0);
  504.             }
  505.             v77 = File_Seek(v76, 0, 2);
  506.             File_Seek(v76, 0, 0);
  507.             v159 = &v67[v77];
  508.             if ( a16 < &v67[v77] )
  509.             {
  510.               sprintf(byte_1DCB3C0, aCannotLoadS_2, v76);
  511.               OutputDebugStringA(byte_1DCB3C0);
  512.             }
  513.             File_Read(v76, v67, v77);
  514.             File_Close(v76);
  515.             v78 = *v67;
  516.             v79 = 0;
  517.             v80 = v67;
  518.             if ( *v67 < 0 )
  519.               goto LABEL_128;
  520.             v81 = (v150 + 4);
  521.             do
  522.             {
  523.               v80 += 4;
  524.               ++v79;
  525.               *v81 = &v67[v78 & 0xFFFFFFF];
  526.               v78 = *v80;
  527.               ++v81;
  528.             }
  529.             while ( *v80 >= 0 );
  530.             if ( v79 < 6 )
  531. LABEL_128:
  532.               memset((4 * (v79 + v147) + 31236920), 0xFFu, 4 * (6 - v79));
  533.             v82 = &v67[*(v80 + 1) & 0xFFFFFFF];
  534.             *(v150 + 28) = v82;
  535.             *(v82 + 56) = *(v150 + 32);
  536.             v67 = v159;
  537.           }
  538.           v55 = a11;
  539.           ++v144;
  540.           v147 += 12;
  541.           v150 += 48;
  542.         }
  543.       }
  544.       v68 = v154 + 612;
  545.       v66 = __OFSUB__(v152 + 1, byte_1D9D019);
  546.       v65 = v152++ + 1 - byte_1D9D019 < 0;
  547.       v154 += 612;
  548.     }
  549.     while ( v65 ^ v66 );
  550.   }
  551.   if ( a16 < v67 )
  552.     OutputDebugStringA(aFile_mem_over2);
  553.   v83 = a16 - v67;
  554.   if ( (a16 - v67) & 3 )
  555.     v83 -= (a16 - v67) & 3;
  556.   memcpy(&v55[v83], v55, v67 - v55);
  557.   v84 = byte_1D9D019;
  558.   v85 = 0;
  559.   v160 = byte_1D9D019;
  560.   memset(off_1DCAF28, 0xFFu, sizeof(off_1DCAF28));
  561.   if ( byte_1D9D019 > 0 )
  562.   {
  563.     v155 = byte_1D9D019;
  564.     v148 = (dword_1D9CF88 + 536);
  565.     v86 = &off_1DCA354;
  566.     do
  567.     {
  568.       v87 = *v148;
  569.       if ( off_1DCAF28[v87] == -1 )
  570.       {
  571.         v88 = *(v86 - 1);
  572.         off_1DCAF28[v87] = v85;
  573.         *(v86 - 1) = (v83 + v88);
  574.         v89 = *(v83 + v88 + 56);
  575.         *v86 = *v86 + v83;
  576.         *(v83 + v88 + 56) = v83 + v89;
  577.         v90 = v86 - 7;
  578.         v91 = 6;
  579.         do
  580.         {
  581.           v92 = *v90;
  582.           if ( *v90 != -1 && (v92 & 0xF0000000) != -1610612736 )
  583.             *v90 = &v92[v83];
  584.           ++v90;
  585.           --v91;
  586.         }
  587.         while ( v91 );
  588.         v84 = v160;
  589.         ++v85;
  590.         v86 += 12;
  591.       }
  592.       v53 = v155 == 1;
  593.       v148 += 306;
  594.       --v155;
  595.     }
  596.     while ( !v53 );
  597.   }
  598.   memset(off_1DCAF28, 0xFFu, sizeof(off_1DCAF28));
  599.   v145 = 0;
  600.   v153 = 0;
  601.   if ( v84 > 0 )
  602.   {
  603.     v93 = 0;
  604.     v161 = 0;
  605.     v149 = (dword_1D9CF88 + 536);
  606.     v156 = &dword_1DCB0F0;
  607.     v158 = &off_1DCA350;
  608.     v162 = &off_1DCA338;
  609.     do
  610.     {
  611.       v94 = *v149;
  612.       if ( off_1DCAF28[v94] == -1 )
  613.       {
  614.         off_1DCAF28[v94] = v145;
  615.         v95 = 0;
  616.         v167 = 0;
  617.         if ( *v162 != -1 )
  618.         {
  619.           v96 = (v158 - 6);
  620.           v165 = (v158 - 6);
  621.           do
  622.           {
  623.             if ( v95 >= 6 )
  624.               break;
  625.             if ( (*v96 & 0xF0000000) == -1610612736 )
  626.             {
  627.               v97 = 2 * (v95 + 6 * off_1DCAF28[(*v96 >> 20) & 0xFF]);
  628.               v98 = v93 + v95;
  629.               v99 = *(word_1DC3CEC + v97);
  630.               LOWORD(v97) = *(word_1DC6014 + v97);
  631.               word_1DC3CEC[v98] = v99;
  632.               word_1DC6014[v98] = v97;
  633.             }
  634.             else
  635.             {
  636.               sub_45D6F0(*v96);
  637.               sub_45D710(&v169);
  638.               v100 = v93 + v95;
  639.               v101 = (a13 + 4 * v164);
  640.               v102 = *(v171 + 6);
  641.               v103 = *v101;
  642.               v104 = *(v171 + 4) << (2 - (v169 & 3));
  643.               v105 = 2 * v100;
  644.               v106 = *(v171 + 4) << (2 - (v169 & 3));
  645.               v173 = v105;
  646.               v107 = sub_45D610(v172, v169 & 7, 1, v103, SHIWORD(v103), v106, v102);
  647.               v108 = *v101;
  648.               v109 = v170;
  649.               *(word_1DC3CEC + v105) = v107;
  650.               v151 = v109;
  651.               *(&v174 + v95) = *v101;
  652.               v175[v95] = HIWORD(v108);
  653.               v168 = 256;
  654.               do
  655.               {
  656.                 LOWORD(v104) = *v151;
  657.                 if ( *v151 )
  658.                 {
  659.                   v110 = v104;
  660.                   v111 = v104;
  661.                   v104 &= 0x1Fu;
  662.                   v112 = 4 * *v149;
  663.                   v113 = *(&v194 + 4 * *v149);
  664.                   v114 = (v110 >> 5) & 0x1F;
  665.                   v115 = v104 + (((BYTE4(v113) & 7) + v113) >> 3);
  666.                   v116 = (v111 >> 10) & 0x1F;
  667.                   if ( v115 >= 1 )
  668.                   {
  669.                     if ( v115 > 31 )
  670.                       v115 = 31;
  671.                   }
  672.                   else
  673.                   {
  674.                     v115 = 1;
  675.                   }
  676.                   v117 = *(&v195 + v112 * 2) / 8 + v114;
  677.                   if ( v117 >= 1 )
  678.                   {
  679.                     if ( v117 > 31 )
  680.                       v117 = 31;
  681.                   }
  682.                   else
  683.                   {
  684.                     v117 = 1;
  685.                   }
  686.                   v118 = v196[v112] / 8 + v116;
  687.                   if ( v118 >= 1 )
  688.                   {
  689.                     if ( v118 > 31 )
  690.                       LOBYTE(v118) = 31;
  691.                   }
  692.                   else
  693.                   {
  694.                     LOBYTE(v118) = 1;
  695.                   }
  696.                   v105 = v173;
  697.                   v119 = v117 | 32 * (v118 | 0xFFFFFFE0);
  698.                   v101 = (a13 + 4 * v164);
  699.                   v120 = v115 | 32 * v119;
  700.                   v95 = v167;
  701.                   *v151 = v120;
  702.                 }
  703.                 v53 = v168 == 1;
  704.                 ++v151;
  705.                 --v168;
  706.               }
  707.               while ( !v53 );
  708.               v121 = sub_45D6A0(v170, *(a12 + 4 * v166) & 0xFFFF, *(a12 + 4 * v166) >> 16);
  709.               v122 = *v101;
  710.               *(word_1DC6014 + v105) = v121;
  711.               v123 = *v101;
  712.               v96 = v165;
  713.               word_1DCAF90[v95] = (v123 >> 8) & 0xFF00 | ((v122 & 0x3F) << (2 - (v169 & 3)));
  714.               ++v166;
  715.               v93 = v161;
  716.               ++v164;
  717.             }
  718.             v124 = *(v96 + 4);
  719.             v96 += 4;
  720.             v167 = ++v95;
  721.             v165 = v96;
  722.           }
  723.           while ( v124 != -1 );
  724.         }
  725.         v163 = sub_531720(v145, *v158, v163, v177[v145]);
  726.         if ( *(*v156 + 95) & 1 )
  727.         {
  728.           v125 = *(*v156 + 20);
  729.           v126 = 0;
  730.           v127 = v175[0];
  731.           *(v125 + 6) = v174 + *(v125 + 6) / (16 / *(v125 + 2));
  732.           *(v125 + 8) += v127;
  733.           *(v125 + 3) /= 16 / *(v125 + 2);
  734.           if ( *(v125 + 5) )
  735.           {
  736.             v128 = v125 + 12;
  737.             do
  738.             {
  739.               v128 += 4;
  740.               v129 = v175[0];
  741.               *(v128 - 4) = v174 + *(v128 - 4) / (16 / *(v125 + 2));
  742.               *(v128 - 2) += v129;
  743.               ++v126;
  744.             }
  745.             while ( v126 < *(v125 + 5) );
  746.           }
  747.         }
  748.         v93 += 6;
  749.         ++v145;
  750.         v162 += 12;
  751.         v161 = v93;
  752.         v158 += 12;
  753.         ++v156;
  754.       }
  755.       v149 += 306;
  756.       ++v153;
  757.     }
  758.     while ( v153 < byte_1D9D019 );
  759.   }
  760.   v130 = 0;
  761.   if ( byte_1D9D019 )
  762.   {
  763.     result = v163;
  764.     v132 = (dword_1D9CF88 + 536);
  765.     do
  766.     {
  767.       v133 = *v132;
  768.       if ( *v132 >= 0 )
  769.         result = sub_5317D0(v130, off_1DCAF28[v133], result);
  770.       else
  771.         result = sub_531B90(v130, v133, result);
  772.       ++v130;
  773.       v132 += 306;
  774.     }
  775.     while ( v130 < byte_1D9D019 );
  776.   }
  777.   else
  778.   {
  779.     result = Sizea;
  780.   }
  781.   return result;
  782. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top