pokemon shuffle c sorce 2

来源:互联网 发布:惊天战神 游戏源码 编辑:程序博客网 时间:2024/06/06 07:17
signed int __fastcall gmThread::Sys_Execute(int a1, int a2)
{
  int v2; // r5@1
  int v3; // r3@3
  int v4; // r2@3
  int v5; // r1@3
  int v6; // r7@3
  int v7; // r4@3
  int v8; // r12@3
  int v9; // r3@6
  int v10; // r0@6
  int v11; // r0@8
  int v12; // r3@8
  int v13; // r3@10
  int v15; // r8@15
  int v16; // r2@15
  int v17; // r3@15
  void (__fastcall *v18)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@15
  signed int v19; // r4@17
  signed int v20; // r0@17
  int v21; // r2@17
  int v22; // r3@17
  int v23; // r3@19
  signed int v24; // r2@23
  int v25; // r2@24
  void (__fastcall *v26)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@24
  signed int v27; // r2@28
  int v28; // r2@29
  signed int v29; // r2@33
  int v30; // r8@33
  int v31; // r2@34
  signed int v32; // r2@38
  int v33; // r2@39
  int v34; // r3@43
  int v35; // r3@43
  int v36; // r1@43
  int v37; // r3@44
  int v38; // r1@44
  signed int v39; // r3@46
  int v40; // r0@46
  int v41; // r2@53
  int v42; // r3@53
  int v43; // r1@53
  int v44; // r1@53
  int v45; // r1@53
  int v46; // r3@54
  int v47; // r1@54
  int v48; // r0@54
  int v49; // r1@54
  int v50; // r1@55
  int v51; // r3@58
  unsigned int v52; // r2@58
  unsigned int v53; // r10@58
  int v54; // r0@59
  void (__fastcall *v55)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@59
  int v56; // r1@61
  int v57; // r10@61
  int v58; // r1@61
  int v59; // r2@61
  int v60; // r10@63
  int v61; // r8@63
  int v62; // r0@63
  void (__fastcall *v63)(_DWORD, _DWORD); // r3@63
  int v64; // r1@67
  int v65; // r3@68
  int v66; // r8@68
  int v67; // r2@70
  int v68; // r3@70
  void (__fastcall *v69)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@70
  int v70; // r0@72
  int v71; // r2@72
  int v72; // r3@72
  void (__fastcall *v73)(_DWORD, _DWORD, _DWORD, _DWORD); // r12@72
  int v74; // r8@74
  int v75; // r9@74
  int v76; // r3@74
  int v77; // r0@74
  int v78; // r1@74
  int v79; // r0@74
  int v80; // r3@74
  void (__fastcall *v81)(_DWORD, _DWORD); // r2@74
  int v82; // r1@78
  int v83; // r2@80
  int v84; // r1@82
  int v85; // r8@84
  int v86; // lr@85
  int v87; // r7@86
  int v88; // r2@86
  int v89; // r1@86
  int v90; // r3@86
  int v91; // r1@86
  int v92; // r0@86
  int v93; // r1@86
  signed int v94; // r12@86
  int v95; // r12@87
  signed int v96; // r0@88
  int v97; // r3@88
  int v98; // r3@94
  int v99; // r8@94
  int v100; // r0@94
  void (__fastcall *v101)(_DWORD, _DWORD); // r3@94
  int v102; // r3@96
  int v103; // r2@96
  int v104; // r1@96
  int v105; // lr@96
  int v106; // r12@96
  int v107; // r1@96
  int v108; // r0@96
  int v109; // r0@98
  bool v110; // zf@99
  int v111; // r3@102
  int v112; // r1@102
  int v113; // r1@102
  int v114; // r3@103
  int v115; // r8@103
  int v116; // r0@103
  int v117; // r8@104
  signed int v118; // r3@105
  int v119; // r1@106
  int v120; // r1@110
  int v121; // r0@111
  int v122; // r1@111
  int v123; // r8@112
  int v124; // r3@112
  int v125; // r0@112
  int v126; // r0@114
  int v127; // r1@114
  int v128; // r2@114
  int v129; // r12@114
  int v130; // r2@114
  int v131; // lr@114
  int v132; // r0@114
  int v133; // r1@114
  int v134; // r0@118
  int v135; // r1@119
  int v136; // r10@119
  int v137; // r1@119
  int v138; // r12@119
  int v139; // r7@121
  int v140; // lr@122
  int v141; // r8@122
  int v142; // r1@122
  int v143; // r1@122
  int v144; // r1@122
  int v145; // lr@123
  int v146; // r1@124
  int v147; // r3@124
  int v148; // r3@128
  int (*v149)(void); // r3@129
  int v150; // lr@132
  int v151; // r0@133
  int v152; // r1@133
  int v153; // r3@134
  int v154; // r12@134
  int v155; // r3@151
  int v156; // r1@151
  int v157; // r1@155
  int v158; // r6@160
  int v159; // r0@160
  int v160; // r7@162
  int v161; // r6@162
  int v162; // r0@162
  char *v163; // [sp+0h] [bp-80h]@0
  int v164; // [sp+Ch] [bp-74h]@58
  signed int v165; // [sp+10h] [bp-70h]@1
  int v166; // [sp+1Ch] [bp-64h]@1
  char v167; // [sp+20h] [bp-60h]@102
  int v168; // [sp+24h] [bp-5Ch]@102
  int v169; // [sp+2Ch] [bp-54h]@6
  int v170; // [sp+30h] [bp-50h]@5
  int v171; // [sp+34h] [bp-4Ch]@60
  char v172; // [sp+38h] [bp-48h]@60
  int v173; // [sp+3Ch] [bp-44h]@61
  int v174; // [sp+40h] [bp-40h]@60
  int v175; // [sp+44h] [bp-3Ch]@61
  char v176; // [sp+48h] [bp-38h]@67
  int v177; // [sp+4Ch] [bp-34h]@67
  char v178; // [sp+50h] [bp-30h]@78
  int v179; // [sp+54h] [bp-2Ch]@78


  v2 = a1;
  v166 = a2;
  v165 = *(_DWORD *)(a1 + 52);
  if ( v165 )
    return v165;
  if ( *(_DWORD *)(a1 + 16) )
  {
    v148 = *(_DWORD *)(a1 + 28);
    if ( *(_BYTE *)(v148 + 552) )
    {
      v149 = *(int (**)(void))(v148 + 20);
      if ( v149 )
      {
        if ( v149() )
          return v165;
      }
    }
  }
  v3 = *(_DWORD *)(v2 + 32);
  v4 = 8 * (*(_DWORD *)(v2 + 44) + 536870911);
  v5 = v3 + v4;
  v6 = v3 + v4 + 8;
  v7 = v3 + 8 * *(_DWORD *)(v2 + 40);
  v8 = *(_DWORD *)(v2 + 68);
  if ( !v8 )
    v8 = *(_DWORD *)(*(_DWORD *)(v5 + 4) + 28);
  v170 = *(_DWORD *)(*(_DWORD *)(v5 + 4) + 28);
  while ( 2 )
  {
    v9 = v8 + 4;
    v169 = v8 + 4;
    v10 = *(_DWORD *)v8;
    switch ( *(_DWORD *)v8 )
    {
      case 0:
        v60 = *(_DWORD *)(v8 + 4);
        v169 = v8 + 8;
        v61 = *(_DWORD *)(v7 - 8);
        *(_DWORD *)(v7 + 4) = v60;
        *(_DWORD *)v7 = 3;
        v62 = *(_DWORD *)(v2 + 28);
        v63 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)(v62 + 512) + 240 * v61 + 4);
        if ( !v63 )
          goto LABEL_66;
        v63(v2, v7 - 8);
        if ( *(_DWORD *)(v7 - 8) )
          goto LABEL_83;
        v62 = *(_DWORD *)(v2 + 28);
LABEL_66:
        if ( !v61 )
        {
          gmLog::LogEntry(v62 + 568, "getdot failed.");
          goto LABEL_98;
        }
        v174 = 3;
        v175 = v60;
        gmTableObject::Get(&v176, *(_DWORD *)(*(_DWORD *)(v62 + 512) + 240 * v61 + 220), &v174);
        v64 = v177;
        *(_DWORD *)(v7 - 8) = *(_DWORD *)&v176;
        *(_DWORD *)(v7 - 4) = v64;
        v8 = v169;
        continue;
      case 1:
        v98 = *(_DWORD *)(v8 + 4);
        v169 = v8 + 8;
        v99 = v7 - 16;
        *(_DWORD *)v7 = 3;
        *(_DWORD *)(v7 + 4) = v98;
        v100 = *(_DWORD *)(v2 + 28);
        v101 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)(v100 + 512) + 240 * *(_DWORD *)(v7 - 16) + 8);
        if ( v101 )
          goto LABEL_95;
        gmLog::LogEntry(v100 + 568, "setdot failed.");
        goto LABEL_98;
      case 2:
        v85 = *(_DWORD *)(v2 + 28);
        v67 = *(_DWORD *)(v85 + 512);
        v68 = v67 + 240 * *(_DWORD *)(v7 - 16);
        v69 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v68 + 12);
        if ( v69 )
          goto LABEL_71;
        v86 = *(_DWORD *)(v68 + 120);
        if ( v86 )
          goto LABEL_86;
        v160 = gmGetOperatorName(2);
        v161 = gmMachine::GetTypeName(*(_DWORD *)(v2 + 28), *(_DWORD *)(v7 - 16));
        v162 = gmMachine::GetTypeName(*(_DWORD *)(v2 + 28), *(_DWORD *)(v7 - 8));
        gmLog::LogEntry(v85 + 568, "operator %s undefined for type %s and %s", v160, v161, v162);
        goto LABEL_98;
      case 3:
        v70 = *(_DWORD *)(v2 + 28);
        v71 = *(_DWORD *)(v70 + 512);
        v72 = v71 + 240 * *(_DWORD *)(v7 - 24);
        v73 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v72 + 16);
        if ( v73 )
        {
          v7 -= 24;
          v73(v2, v7, v71, v72);
          v8 = v169;
          continue;
        }
        v139 = *(_DWORD *)(v72 + 124);
        if ( !v139 )
        {
          gmLog::LogEntry(v70 + 568, "setind failed.");
          goto LABEL_98;
        }
        v140 = v7 - 8;
        v141 = v7 + 8;
        v142 = *(_DWORD *)(v7 - 4);
        *(_DWORD *)v141 = *(_DWORD *)(v7 - 8);
        *(_DWORD *)(v141 + 4) = v142;
        v143 = *(_DWORD *)(v7 - 12);
        v88 = (int)&v169;
        *(_DWORD *)v7 = *(_DWORD *)(v7 - 16);
        *(_DWORD *)(v7 + 4) = v143;
        v144 = *(_DWORD *)(v7 - 20);
        v90 = (int)&v170;
        *(_DWORD *)v140 = *(_DWORD *)(v7 - 24);
        *(_DWORD *)(v140 + 4) = v144;
        v93 = 3;
        *(_DWORD *)(v7 - 24) = 0;
        v92 = v2;
        *(_DWORD *)(v7 - 20) = 0;
        *(_DWORD *)(v7 - 12) = v139;
        *(_DWORD *)(v7 - 16) = 5;
        v95 = (v7 + 16 - *(_DWORD *)(v2 + 32)) >> 3;
        goto LABEL_88;
      case 4:
      case 5:
      case 6:
      case 7:
      case 8:
      case 0xB:
      case 0xC:
      case 0xD:
      case 0xE:
      case 0xF:
      case 0x11:
      case 0x12:
      case 0x13:
      case 0x14:
      case 0x15:
      case 0x16:
        v65 = *(_DWORD *)(v7 - 8);
        v66 = *(_DWORD *)(v2 + 28);
        if ( v65 < *(_DWORD *)(v7 - 16) )
          v65 = *(_DWORD *)(v7 - 16);
        v67 = *(_DWORD *)(v66 + 512);
        v68 = v67 + 240 * v65 + 4 * v10;
        v69 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v68 + 4);
        if ( v69 )
        {
LABEL_71:
          v69(v2, v7 - 16, v67, v68);
          v7 -= 8;
          v8 = v169;
          continue;
        }
        v86 = *(_DWORD *)(v68 + 112);
        if ( !v86 )
        {
          gmGetOperatorName(v10);
          gmMachine::GetTypeName(*(_DWORD *)(v2 + 28), *(_DWORD *)(v7 - 16));
          gmMachine::GetTypeName(*(_DWORD *)(v2 + 28), *(_DWORD *)(v7 - 8));
          gmLog::LogEntry(v66 + 568, "operator %s undefined for type %s and %s");
          goto LABEL_98;
        }
LABEL_86:
        v87 = v7 + 8;
        v88 = (int)&v169;
        v89 = *(_DWORD *)(v7 - 12);
        v90 = (int)&v170;
        *(_DWORD *)v7 = *(_DWORD *)(v7 - 16);
        *(_DWORD *)(v7 + 4) = v89;
        v91 = *(_DWORD *)(v7 - 4);
        *(_DWORD *)v87 = *(_DWORD *)(v7 - 8);
        *(_DWORD *)(v87 + 4) = v91;
        v92 = v2;
        *(_DWORD *)(v7 - 16) = v69;
        v93 = 2;
        *(_DWORD *)(v7 - 12) = v69;
        *(_DWORD *)(v7 - 8) = 5;
        *(_DWORD *)(v7 - 4) = v86;
        v94 = v7 + 16 - *(_DWORD *)(v2 + 32);
        goto LABEL_87;
      case 9:
      case 0xA:
      case 0x10:
      case 0x17:
      case 0x18:
      case 0x19:
        v15 = *(_DWORD *)(v2 + 28);
        v16 = *(_DWORD *)(v15 + 512);
        v17 = v16 + 240 * *(_DWORD *)(v7 - 8) + 4 * v10;
        v18 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v17 + 4);
        if ( v18 )
        {
          v18(v2, v7 - 8, v16, v17);
          v8 = v169;
          continue;
        }
        v145 = *(_DWORD *)(v17 + 112);
        if ( !v145 )
        {
          v158 = gmGetOperatorName(v10);
          v159 = gmMachine::GetTypeName(*(_DWORD *)(v2 + 28), *(_DWORD *)(v7 - 8));
          gmLog::LogEntry(v15 + 568, "unary operator %s undefined for type %s", v158, v159, v163);
          goto LABEL_98;
        }
        v146 = *(_DWORD *)(v7 - 4);
        v147 = v7 + 8;
        v88 = (int)&v169;
        *(_DWORD *)v147 = *(_DWORD *)(v7 - 8);
        *(_DWORD *)(v147 + 4) = v146;
        v90 = (int)&v170;
        *(_DWORD *)(v7 - 8) = 0;
        v92 = v2;
        *(_DWORD *)(v7 - 4) = 0;
        *(_DWORD *)v7 = 5;
        *(_DWORD *)(v7 + 4) = v145;
        v93 = 1;
        v94 = v7 + 16 - *(_DWORD *)(v2 + 32);
        goto LABEL_87;
      default:
        goto LABEL_14;
      case 0x1B:
        v83 = *(_DWORD *)(v2 + 28);
        if ( !*(_BYTE *)(v83 + 552) || !*(_DWORD *)(v83 + 8) )
        {
LABEL_14:
          v8 += 4;
          continue;
        }
        v84 = *(_DWORD *)(v2 + 32);
        *(_DWORD *)(v2 + 68) = v9;
        *(_DWORD *)(v2 + 40) = (v7 - v84) >> 3;
        if ( (*(int (__fastcall **)(int))(v83 + 8))(v2) )
          return v165;
        goto LABEL_83;
      case 0x1C:
        v8 = v170 + *(_DWORD *)(v8 + 4);
        continue;
      case 0x1D:
        v32 = *(_DWORD *)(v7 - 8);
        v30 = v7 - 8;
        if ( v32 <= 6 )
          goto LABEL_41;
        v33 = *(_DWORD *)(*(_DWORD *)(v2 + 28) + 512) + 240 * v32;
        v26 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v33 + 108);
        if ( v26 )
        {
          v26(v2, v7 - 8, v33, v9);
          v9 = v169;
        }
        else
        {
          v150 = *(_DWORD *)(v33 + 216);
          if ( v150 )
            goto LABEL_138;
        }
LABEL_41:
        if ( !*(_DWORD *)(v7 - 4) )
          goto LABEL_37;
        goto LABEL_42;
      case 0x1E:
        v29 = *(_DWORD *)(v7 - 8);
        v30 = v7 - 8;
        if ( v29 <= 6 )
          goto LABEL_36;
        v31 = *(_DWORD *)(*(_DWORD *)(v2 + 28) + 512) + 240 * v29;
        v26 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v31 + 108);
        if ( v26 )
        {
          v26(v2, v7 - 8, v31, v9);
          v9 = v169;
        }
        else
        {
          v150 = *(_DWORD *)(v31 + 216);
          if ( v150 )
          {
LABEL_138:
            v151 = *(_DWORD *)v30;
            v152 = *(_DWORD *)(v30 + 4);
            goto LABEL_134;
          }
        }
LABEL_36:
        if ( *(_DWORD *)(v7 - 4) )
        {
LABEL_37:
          v7 = v30;
          v8 = v170 + *(_DWORD *)v9;
        }
        else
        {
LABEL_42:
          v8 = v9 + 4;
          v7 = v30;
        }
        continue;
      case 0x1F:
        v27 = *(_DWORD *)(v7 - 8);
        if ( v27 <= 6 )
          goto LABEL_31;
        v28 = *(_DWORD *)(*(_DWORD *)(v2 + 28) + 512) + 240 * v27;
        v26 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v28 + 108);
        if ( v26 )
        {
          v26(v2, v7 - 8, v28, v9);
          v9 = v169;
        }
        else
        {
          v150 = *(_DWORD *)(v28 + 216);
          if ( v150 )
            goto LABEL_133;
        }
LABEL_31:
        if ( !*(_DWORD *)(v7 - 4) )
          goto LABEL_27;
        goto LABEL_32;
      case 0x20:
        v24 = *(_DWORD *)(v7 - 8);
        if ( v24 <= 6 )
          goto LABEL_26;
        v25 = *(_DWORD *)(*(_DWORD *)(v2 + 28) + 512) + 240 * v24;
        v26 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(v25 + 108);
        if ( v26 )
        {
          v26(v2, v7 - 8, v25, v9);
          v9 = v169;
        }
        else
        {
          v150 = *(_DWORD *)(v25 + 216);
          if ( v150 )
          {
LABEL_133:
            v151 = *(_DWORD *)(v7 - 8);
            v152 = *(_DWORD *)(v7 - 4);
LABEL_134:
            v153 = v7 + 8;
            *(_DWORD *)v153 = v151;
            *(_DWORD *)(v153 + 4) = v152;
            v90 = (int)&v170;
            *(_DWORD *)(v7 - 8) = v26;
            v92 = v2;
            *(_DWORD *)(v7 - 4) = v26;
            *(_DWORD *)v7 = 5;
            *(_DWORD *)(v7 + 4) = v150;
            v93 = 1;
            v154 = *(_DWORD *)(v2 + 32);
            v169 -= 4;
            v88 = (int)&v169;
            v94 = v7 + 16 - v154;
LABEL_87:
            v95 = v94 >> 3;
LABEL_88:
            *(_DWORD *)(v2 + 40) = v95;
            v96 = gmThread::PushStackFrame(v92, v93, v88, v90);
            v97 = *(_DWORD *)(v2 + 32);
            v7 = v97 + 8 * *(_DWORD *)(v2 + 40);
            v6 = v97 + 8 * *(_DWORD *)(v2 + 44);
            if ( v96 )
            {
              if ( v96 == 6 )
                return v165;
              if ( v96 != 7 )
              {
                if ( v96 == 3 )
                {
                  v165 = 3;
                  gmMachine::Sys_SwitchState(*(_DWORD *)(v2 + 28), v2, 3);
                }
                else
                {
                  v165 = v96;
                }
                return v165;
              }
LABEL_98:
              *(_DWORD *)(v2 + 68) = v169;
              gmThread::LogLineFile(v2);
              gmThread::LogCallStack(v2);
              v109 = *(_DWORD *)(v2 + 28);
              if ( !gmMachine::s_machineCallback )
                goto LABEL_101;
              v110 = ((int (__fastcall *)(int, signed int, int))gmMachine::s_machineCallback)(v109, 1, v2) == 0;
              v109 = *(_DWORD *)(v2 + 28);
              if ( v110 || !*(_BYTE *)(v109 + 552) || !*(_DWORD *)(v109 + 4) )
                goto LABEL_101;
              v165 = 4;
              gmMachine::Sys_SwitchState(v109, v2, 4);
              return v165;
            }
            goto LABEL_83;
          }
        }
LABEL_26:
        if ( *(_DWORD *)(v7 - 4) )
LABEL_27:
          v8 = v170 + *(_DWORD *)v9;
        else
LABEL_32:
          v8 = v9 + 4;
        continue;
      case 0x21:
        v19 = v7 - *(_DWORD *)(v2 + 32);
        v169 = v8 + 8;
        *(_DWORD *)(v2 + 40) = v19 >> 3;
        v20 = gmThread::PushStackFrame(v2, *(_DWORD *)(v8 + 4), (int)&v169, (int)&v170);
        v21 = *(_DWORD *)(v2 + 40);
        v22 = *(_DWORD *)(v2 + 32);
        v7 = v22 + 8 * v21;
        v6 = v22 + 8 * *(_DWORD *)(v2 + 44);
        if ( v20 )
        {
          if ( v20 != 6 )
          {
            if ( v20 == 7 )
              goto LABEL_98;
            if ( v20 == 3 )
            {
              if ( v166 )
              {
                v155 = v22 + 8 * (v21 + 536870911);
                v156 = *(_DWORD *)(v155 + 4);
                *(_DWORD *)v166 = *(_DWORD *)v155;
                *(_DWORD *)(v166 + 4) = v156;
              }
              goto LABEL_156;
            }
            v165 = v20;
          }
          return v165;
        }
        if ( *(_DWORD *)(v2 + 16) )
        {
          v23 = *(_DWORD *)(v2 + 28);
          if ( *(_BYTE *)(v23 + 552) )
          {
            if ( *(_DWORD *)(v23 + 12) )
            {
              *(_DWORD *)(v2 + 68) = v169;
              if ( (*(int (__fastcall **)(int))(v23 + 12))(v2) )
                return v165;
            }
          }
        }
        goto LABEL_83;
      case 0x22:
        *(_DWORD *)v7 = 0;
        v7 += 8;
        *(_DWORD *)(v7 - 4) = 0;
        goto LABEL_8;
      case 0x23:
LABEL_8:
        *(_DWORD *)(v2 + 40) = (v7 - *(_DWORD *)(v2 + 32)) >> 3;
        v11 = gmThread::Sys_PopStackFrame(v2, &v169, &v170);
        v12 = *(_DWORD *)(v2 + 32);
        v7 = v12 + 8 * *(_DWORD *)(v2 + 40);
        v6 = v12 + 8 * *(_DWORD *)(v2 + 44);
        if ( !v11 )
        {
          if ( *(_DWORD *)(v2 + 16) )
          {
            v13 = *(_DWORD *)(v2 + 28);
            if ( *(_BYTE *)(v13 + 552) )
            {
              if ( *(_DWORD *)(v13 + 16) )
              {
                *(_DWORD *)(v2 + 68) = v169;
                if ( (*(int (__fastcall **)(int))(v13 + 16))(v2) )
                  return v165;
              }
            }
          }
LABEL_83:
          v8 = v169;
          continue;
        }
        if ( v11 != 3 )
        {
          if ( v11 == 7 )
            goto LABEL_98;
          goto LABEL_83;
        }
        if ( v166 )
        {
          v157 = *(_DWORD *)(v7 - 4);
          *(_DWORD *)v166 = *(_DWORD *)(v7 - 8);
          *(_DWORD *)(v166 + 4) = v157;
        }
LABEL_156:
        v109 = *(_DWORD *)(v2 + 28);
LABEL_101:
        gmMachine::Sys_SwitchState(v109, v2, 3);
        return 3;
      case 0x24:
        v169 = v8 + 8;
        v51 = *(_DWORD *)(v7 - 16);
        v52 = *(_DWORD *)(v8 + 4);
        v53 = v52 >> 16;
        v164 = (unsigned __int16)v52;
        if ( v51 == 4 )
        {
          v174 = *(_DWORD *)(v7 - 4);
          v134 = gmTableObject::GetNext(*(_DWORD *)(v7 - 12), &v174);
          *(_DWORD *)(v7 - 4) = v174;
          if ( v134 )
          {
            v135 = *(_DWORD *)(v134 + 8);
            v136 = v6 + 8 * v53;
            *(_DWORD *)v136 = *(_DWORD *)(v134 + 4);
            *(_DWORD *)(v136 + 4) = v135;
            v137 = *(_DWORD *)(v134 + 16);
            v138 = v6 + 8 * v164;
            *(_DWORD *)v138 = *(_DWORD *)(v134 + 12);
            *(_DWORD *)(v138 + 4) = v137;
            *(_DWORD *)v7 = 1;
            *(_DWORD *)(v7 + 4) = 1;
          }
          else
          {
            *(_DWORD *)(v7 + 4) = 0;
            *(_DWORD *)v7 = 1;
          }
LABEL_120:
          v7 += 8;
          v8 = v169;
        }
        else
        {
          v54 = *(_DWORD *)(v2 + 28);
          v55 = *(void (__fastcall **)(_DWORD, _DWORD, _DWORD, _DWORD))(*(_DWORD *)(v54 + 512) + 240 * v51 + 236);
          if ( !v55 )
          {
            gmLog::LogEntry(v54 + 568, "foreach expression has no iterator function");
            goto LABEL_98;
          }
          v171 = *(_DWORD *)(v7 - 4);
          v163 = &v172;
          v55(v2, *(_DWORD *)(v7 - 12), &v171, &v174);
          if ( v171 == -1 )
          {
            *(_DWORD *)(v7 + 4) = 0;
            *(_DWORD *)v7 = 1;
          }
          else
          {
            v56 = v175;
            v57 = v6 + 8 * v53;
            *(_DWORD *)v57 = v174;
            *(_DWORD *)(v57 + 4) = v56;
            v58 = v173;
            v59 = v6 + 8 * v164;
            *(_DWORD *)v59 = *(_DWORD *)&v172;
            *(_DWORD *)(v59 + 4) = v58;
            *(_DWORD *)v7 = 1;
            *(_DWORD *)(v7 + 4) = 1;
          }
          v7 += 8;
          *(_DWORD *)(v7 - 12) = v171;
          v8 = v169;
        }
        continue;
      case 0x25:
        v7 -= 8;
        v8 += 4;
        continue;
      case 0x26:
        v7 -= 16;
        v8 += 4;
        continue;
      case 0x27:
        v50 = *(_DWORD *)(v7 - 4);
        *(_DWORD *)v7 = *(_DWORD *)(v7 - 8);
        *(_DWORD *)(v7 + 4) = v50;
        v7 += 8;
        v8 = v169;
        continue;
      case 0x28:
        v46 = v7 + 8;
        v47 = *(_DWORD *)(v7 - 12);
        *(_DWORD *)v7 = *(_DWORD *)(v7 - 16);
        *(_DWORD *)(v7 + 4) = v47;
        v48 = *(_DWORD *)(v7 - 8);
        v49 = *(_DWORD *)(v7 - 4);
        v7 += 16;
        v8 = v169;
        *(_DWORD *)v46 = v48;
        *(_DWORD *)(v46 + 4) = v49;
        continue;
      case 0x29:
        v41 = v7 - 8;
        v42 = v7 - 16;
        v43 = *(_DWORD *)(v7 - 4);
        *(_DWORD *)v7 = *(_DWORD *)(v7 - 8);
        *(_DWORD *)(v7 + 4) = v43;
        v44 = *(_DWORD *)(v7 - 12);
        *(_DWORD *)v41 = *(_DWORD *)(v7 - 16);
        *(_DWORD *)(v41 + 4) = v44;
        v45 = *(_DWORD *)(v7 + 4);
        *(_DWORD *)v42 = *(_DWORD *)v7;
        *(_DWORD *)(v42 + 4) = v45;
        v8 = v169;
        continue;
      case 0x2A:
        *(_DWORD *)v7 = 0;
        v7 += 8;
        *(_DWORD *)(v7 - 4) = 0;
        v8 = v169;
        continue;
      case 0x2B:
        *(_DWORD *)v7 = 1;
        v7 += 8;
        v8 = v169 + 4;
        *(_DWORD *)(v7 - 4) = *(_DWORD *)v169;
        continue;
      case 0x2C:
        *(_DWORD *)v7 = 1;
        *(_DWORD *)(v7 + 4) = 0;
        v7 += 8;
        v8 = v169;
        continue;
      case 0x2D:
        *(_DWORD *)v7 = 1;
        *(_DWORD *)(v7 + 4) = 1;
        v7 += 8;
        v8 = v169;
        continue;
      case 0x2E:
        *(_DWORD *)v7 = 2;
        v7 += 8;
        v8 = v169 + 4;
        *(_DWORD *)(v7 - 4) = *(_DWORD *)v169;
        continue;
      case 0x2F:
        *(_DWORD *)v7 = 3;
        v7 += 8;
        v8 = v169 + 4;
        *(_DWORD *)(v7 - 4) = *(_DWORD *)v169;
        continue;
      case 0x30:
        v39 = v7 - *(_DWORD *)(v2 + 32);
        v7 += 8;
        *(_DWORD *)(v2 + 40) = v39 >> 3;
        *(_DWORD *)(v7 - 8) = 4;
        v40 = gmMachine::AllocTableObject(*(_DWORD *)(v2 + 28));
        v8 = v169;
        *(_DWORD *)(v7 - 4) = v40;
        continue;
      case 0x31:
        *(_DWORD *)v7 = 5;
        v7 += 8;
        v8 = v169 + 4;
        *(_DWORD *)(v7 - 4) = *(_DWORD *)v169;
        continue;
      case 0x32:
        v37 = *(_DWORD *)(v2 + 32) + 8 * (*(_DWORD *)(v2 + 44) + 536870910);
        v38 = *(_DWORD *)(v37 + 4);
        *(_DWORD *)v7 = *(_DWORD *)v37;
        *(_DWORD *)(v7 + 4) = v38;
        v7 += 8;
        v8 = v169;
        continue;
      case 0x33:
        v34 = *(_DWORD *)(v8 + 4);
        v169 = v8 + 8;
        v35 = v6 + 8 * v34;
        v36 = *(_DWORD *)(v35 + 4);
        *(_DWORD *)v7 = *(_DWORD *)v35;
        *(_DWORD *)(v7 + 4) = v36;
        v7 += 8;
        v8 = v169;
        continue;
      case 0x34:
        v114 = *(_DWORD *)(v2 + 28);
        v115 = *(_DWORD *)(v8 + 4);
        v169 = v8 + 8;
        v116 = *(_DWORD *)(v114 + 24);
        if ( *(_BYTE *)(v116 + 112) )
        {
          v117 = v6 + 8 * v115;
        }
        else
        {
          v118 = *(_DWORD *)(v6 + 8 * v115);
          v117 = v6 + 8 * v115;
          if ( v118 > 2 )
          {
            v119 = *(_DWORD *)(v117 + 4);
            if ( v119 )
            {
              if ( !*(_BYTE *)(v119 + 13) && *(_DWORD *)(v116 + 96) != *(_BYTE *)(v119 + 12) )
                gmGCColorSet::GrayThisObject(v116 + 4);
            }
          }
        }
        v7 -= 8;
        v120 = *(_DWORD *)(v7 + 4);
        *(_DWORD *)v117 = *(_DWORD *)v7;
        *(_DWORD *)(v117 + 4) = v120;
        v8 = v169;
        continue;
      case 0x35:
        *(_DWORD *)v7 = 3;
        v111 = v169 + 4;
        *(_DWORD *)(v7 + 4) = *(_DWORD *)v169;
        v112 = *(_DWORD *)(v2 + 28);
        v169 = v111;
        gmTableObject::Get(&v167, *(_DWORD *)(v112 + 116), v7);
        v113 = v168;
        *(_DWORD *)v7 = *(_DWORD *)&v167;
        *(_DWORD *)(v7 + 4) = v113;
        v7 += 8;
        v8 = v169;
        continue;
      case 0x36:
        *(_DWORD *)v7 = 3;
        v121 = v169 + 4;
        *(_DWORD *)(v7 + 4) = *(_DWORD *)v169;
        v7 -= 8;
        v122 = *(_DWORD *)(v2 + 28);
        v169 = v121;
        v163 = 0;
        gmTableObject::Set(*(_DWORD *)(v122 + 116));
        v8 = v169;
        continue;
      case 0x37:
        v74 = *(_DWORD *)(v2 + 32);
        v75 = *(_DWORD *)(v2 + 44) + 536870910;
        v169 = v8 + 8;
        v76 = v74 + 8 * v75;
        v77 = *(_DWORD *)v76;
        v78 = *(_DWORD *)(v76 + 4);
        *(_DWORD *)(v7 + 12) = *(_DWORD *)(v8 + 4);
        *(_DWORD *)(v7 + 8) = 3;
        *(_DWORD *)v7 = v77;
        *(_DWORD *)(v7 + 4) = v78;
        v79 = *(_DWORD *)(v2 + 28);
        v80 = *(_DWORD *)(v74 + 8 * v75);
        v81 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)(v79 + 512) + 240 * v80 + 4);
        if ( !v81 )
          goto LABEL_77;
        v81(v2, v7);
        if ( *(_DWORD *)v7 )
          goto LABEL_120;
        v80 = *(_DWORD *)(v74 + 8 * v75);
        v79 = *(_DWORD *)(v2 + 28);
LABEL_77:
        if ( !v80 )
        {
          gmLog::LogEntry(v79 + 568, "getthis failed. this is null");
          goto LABEL_98;
        }
        gmTableObject::Get(&v178, *(_DWORD *)(*(_DWORD *)(v79 + 512) + 240 * v80 + 220), v7 + 8);
        v82 = v179;
        *(_DWORD *)v7 = *(_DWORD *)&v178;
        *(_DWORD *)(v7 + 4) = v82;
        v7 += 8;
        v8 = v169;
        continue;
      case 0x38:
        v99 = v7 - 8;
        v102 = *(_DWORD *)(v2 + 32);
        v103 = *(_DWORD *)(v2 + 44) + 536870910;
        v169 = v8 + 8;
        v104 = *(_DWORD *)(v7 - 4);
        v105 = v102 + 8 * v103;
        v106 = *(_DWORD *)(v8 + 4);
        *(_DWORD *)v7 = *(_DWORD *)(v7 - 8);
        *(_DWORD *)(v7 + 4) = v104;
        v107 = *(_DWORD *)(v105 + 4);
        *(_DWORD *)v99 = *(_DWORD *)v105;
        *(_DWORD *)(v99 + 4) = v107;
        *(_DWORD *)(v7 + 12) = v106;
        *(_DWORD *)(v7 + 8) = 3;
        v108 = *(_DWORD *)(v2 + 28);
        v101 = *(void (__fastcall **)(_DWORD, _DWORD))(*(_DWORD *)(v108 + 512) + 240 * *(_DWORD *)(v102 + 8 * v103) + 8);
        if ( !v101 )
        {
          ((void (__fastcall *)(int, _DWORD))gmLog::LogEntry)(v108 + 568, "setthis failed.");
          goto LABEL_98;
        }
LABEL_95:
        v101(v2, v99);
        v7 = v99;
        v8 = v169;
        continue;
      case 0x39:
        v123 = gmMachine::CreateThread(*(_DWORD *)(v2 + 28), &v174);
        gmThread::Touch(v123, *(_DWORD *)(v2 + 36) - *(_DWORD *)(v2 + 44) - 4);
        memcpy(
          *(void **)(v123 + 32),
          (const void *)(*(_DWORD *)(v2 + 32) + 8 * (*(_DWORD *)(v2 + 44) + 536870910)),
          8 * (*(_DWORD *)(v2 + 40) - *(_DWORD *)(v2 + 44) + 2));
        *(_DWORD *)(v123 + 40) = *(_DWORD *)(v2 + 40) - *(_DWORD *)(v2 + 44) + 2;
        v124 = *(_DWORD *)(v2 + 28);
        v125 = *(_DWORD *)(v124 + 220);
        if ( v125 )
          *(_DWORD *)(v124 + 220) = *(_DWORD *)v125;
        else
          v125 = gmMemChain::Alloc(v124 + 224);
        *(_DWORD *)(v123 + 48) = v125;
        *(_DWORD *)v125 = 0;
        v7 += 8;
        v126 = v169;
        *(_DWORD *)(*(_DWORD *)(v123 + 48) + 4) = 0;
        *(_DWORD *)(*(_DWORD *)(v123 + 48) + 8) = 0;
        v127 = *(_DWORD *)(v123 + 40);
        v128 = *(_DWORD *)(v123 + 32);
        *(_DWORD *)(v123 + 68) = v126 + 4;
        *(_DWORD *)(v123 + 44) = 2;
        v129 = *(_DWORD *)(v2 + 72);
        *(_DWORD *)(v128 + 8 * v127) = 1;
        v130 = *(_DWORD *)(v123 + 40);
        v131 = *(_DWORD *)(v123 + 32);
        v132 = v169;
        *(_DWORD *)(v123 + 40) = v130 + 1;
        v133 = v170;
        *(_DWORD *)(v131 + 8 * v130 + 4) = v129;
        v169 = v133 + *(_DWORD *)v132;
        *(_DWORD *)(v7 - 8) = 1;
        v8 = v169;
        *(_DWORD *)(v7 - 4) = *(_DWORD *)(v123 + 72);
        continue;
    }
  }
}
0 0
原创粉丝点击