If you want to help us maintaining this wiki, check out or discord server: https://discord.gg/3u69jMa 

SWRepublicCommando.exe

From SWRC Wiki
Jump to: navigation, search
//----- (10908690) --------------------------------------------------------
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
  LPSTR v4; // esi@1
  const char *v5; // eax@1
  char v6[4]; // ecx@2
  HWND v7; // edi@15
  bool v8; // zf@18
  CHAR v9; // al@19
  const char *v10; // eax@25
  const char *v11; // eax@25
  const char *v12; // eax@26
  int v13; // eax@26
  const char v14; // al@28
  int result; // eax@33
  const char *v16; // eax@35
  int v17; // ebx@35
  int v18; // eax@35
  int v19; // eax@35
  int v20; // eax@35
  int v21; // eax@35
  const char *v22; // eax@37
  const char *v23; // eax@38
  const char *v24; // eax@39
  int v25; // eax@40
  int v26; // edx@45
  int v27; // ecx@45
  HINSTANCE v28; // esi@45
  const char *v29; // eax@48
  HWND v30; // eax@49
  const char *v31; // eax@50
  int v32; // edx@51
  int v33; // edx@51
  signed int v34; // esi@52
  const char *v35; // eax@52
  const char *v36; // eax@54
  const char *v37; // eax@56
  const char *v38; // eax@58
  const char *v39; // eax@60
  const char *v40; // eax@62
  const char *v41; // eax@64
  const char *v42; // eax@66
  int v43; // eax@69
  int v44; // edx@69
  int v45; // eax@69
  int v46; // edx@69
  int v47; // ebx@70
  const char *v48; // eax@71
  const char *v49; // eax@71
  int v50; // eax@72
  int v51; // ecx@74
  char *v52; // edi@76
  int v53; // esi@78
  int v54; // eax@78
  int v55; // edx@78
  int v56; // eax@82
  int v57; // edx@84
  HWND v58; // eax@84
  const char *v59; // eax@84
  int v60; // eax@85
  int v61; // [sp-8h] [bp-1A4h]@46
  signed int v62; // [sp-4h] [bp-1A0h]@51
  int v63; // [sp+0h] [bp-19Ch]@1
  const CHAR szClass; // [sp+Ch] [bp-190h]@15
  char Dest; // [sp+10Ch] [bp-90h]@1
  char v66; // [sp+140h] [bp-5Ch]@35
  char v67; // [sp+148h] [bp-54h]@35
  char v68; // [sp+150h] [bp-4Ch]@45
  LPARAM lParam; // [sp+154h] [bp-48h]@33
  int v70; // [sp+158h] [bp-44h]@33
  LPSTR v71; // [sp+15Ch] [bp-40h]@33
  int v72; // [sp+160h] [bp-3Ch]@41
  int v73; // [sp+164h] [bp-38h]@1
  char v74; // [sp+168h] [bp-34h]@35
  int v75; // [sp+170h] [bp-2Ch]@37
  char v76; // [sp+174h] [bp-28h]@71
  int v77; // [sp+178h] [bp-24h]@37
  char v78; // [sp+17Ch] [bp-20h]@52
  char v79; // [sp+184h] [bp-18h]@52
  int *v80; // [sp+18Ch] [bp-10h]@1
  int v81; // [sp+198h] [bp-4h]@18

  v80 = &v63;
  strncpy(&Dest, "752F41D039DB4507A84B40488E76721E 0123456789ABCDEIPA", 0x33u);
  GIsStarted = 1;
  v73 = 0;
  ::hInstance = hInstance;
  v4 = GetCommandLineA();
  v5 = appPackage();
  appStrcpy("Launch", v5);
  switch ( (unsigned __int8)GetUserDefaultLCID() )
  {
    case 9u:
      *(_DWORD *)v6 = "int";
      goto LABEL_11;
    case 0x11u:
      *(_DWORD *)v6 = "jpt";
      goto LABEL_11;
    case 7u:
      *(_DWORD *)v6 = "det";
      goto LABEL_11;
    case 0xCu:
      *(_DWORD *)v6 = "frt";
      goto LABEL_11;
    case 0xAu:
      *(_DWORD *)v6 = "est";
      goto LABEL_11;
    case 0x10u:
      *(_DWORD *)v6 = "itt";
      goto LABEL_11;
    case 0x12u:
      *(_DWORD *)v6 = "krt";
      goto LABEL_11;
    case 4u:
      *(_DWORD *)v6 = "cht";
      goto LABEL_11;
    case 0x16u:
      *(_DWORD *)v6 = "prt";
LABEL_11:
      UObject::SetLanguage(*(_DWORD *)v6);
      break;
    default:
      break;
  }
  if ( appStrfind(v4, "NewWindow")
    || appStrfind(v4, "changevideo")
    || appStrfind(v4, "TestRenDev")
    || (sub_10901240((char *)&szClass, (int)"WLog"), (v7 = FindWindowExA(0, 0, &szClass, 0)) == 0) )
  {
LABEL_18:
    GIsGuarded = 1;
    GIsClient = 1;
    v8 = *v4 == 34;
    v81 = 0;
    if ( !v8 )
      goto LABEL_22;
    while ( 1 )
    {
      v9 = (v4++)[1];
      if ( !v9 )
        break;
      if ( v9 == 34 )
      {
        while ( 1 )
        {
          ++v4;
LABEL_22:
          if ( !*v4 )
            goto LABEL_25;
          if ( *v4 == 32 )
          {
            ++v4;
            goto LABEL_25;
          }
        }
      }
    }
LABEL_25:
    appInit("Launch", v4, &dword_10954928, &dword_1095491C, &unk_109548F0, sub_10908630, 1);
    GIsServer = 1;
    v10 = appCmdLine();
    GIsClient = ParseParam(v10, "SERVER") == 0;
    GIsEditor = 0;
    GIsScriptable = 1;
    v11 = appCmdLine();
    GUseFrontEnd = ParseParam(v11, "NOUI") == 0;
    if ( !GIsClient || (v12 = appCmdLine(), (v13 = ParseParam(v12, "LAZY")) != 0) )
      v13 = 1;
    GLazyLoad = v13;
    v16 = appCmdLine();
    v17 = ParseParam(v16, "LOG");
    v18 = FString::FString(&v70, "..\\Help");
    LOBYTE(v81) = 1;
    v19 = FString::operator_(v18, &v66, "Launch");
    LOBYTE(v81) = 2;
    v20 = FString::operator_(v19, &v67, "Logo.bmp");
    LOBYTE(v81) = 3;
    TArray<char>::TArray<char>(&v74, v20, 0);
    LOBYTE(v81) = 7;
    FStringTemp::_FStringTemp(&v67);
    LOBYTE(v81) = 6;
    FStringTemp::_FStringTemp(&v66);
    LOBYTE(v81) = 5;
    FString::_FString(&v70);
    v21 = FString::operator_(&v74);
    if ( (*(int (__stdcall **)(int))(*(_DWORD *)GFileManager + 12))(v21) < 0 )
      FString::operator_(&v74, "..\\Help\\Logo.bmp");
    v22 = appPackage();
    appStrcpy("Launch", v22);
    v77 = 0;
    v75 = 0;
    hInstance = 0;
    if ( !v17 )
    {
      v23 = appCmdLine();
      if ( !ParseParam(v23, "server") )
      {
        v24 = appCmdLine();
        if ( !appStrfind(v24, "TestRenDev") )
        {
          v25 = FString::operator_(&v74);
          sub_109012E0(v25, (int)&v77, (int)&v75, (int)&hInstance);
        }
      }
    }
    v72 = 0;
    (*(void (__stdcall **)(_DWORD, _DWORD, int *, _DWORD))(*(_DWORD *)GConfig + 4))("FirstRun", "FirstRun", &v72, 0);
    if ( GIsClient )
      sub_109040B0(v77, v75, (signed int)hInstance);
    if ( GIsRequestingExit )
    {
      sub_10901460();
      appPreExit();
      appExit();
      LOBYTE(v81) = 0;
      FString::_FString(&v74);
      return 0;
    }
    InitWindowing();
    GameSpyCDKeyResponseInterface::GameSpyCDKeyResponseInterface(&v68);
    v26 = *(_DWORD *)GMalloc;
    LOBYTE(v81) = 8;
    v28 = (HINSTANCE)(*(int (__stdcall **)(signed int))(v26 + 4))(436);
    hInstance = v28;
    LOBYTE(v81) = 9;
    if ( v28 )
    {
      v77 = (int)&v61;
      FName::FName(&v61, "GameLog", 1, v27, 0);
      WLog::WLog(v28, &byte_10954930, &dword_1095492C);
      *(_DWORD *)v28 = &off_10944D38;
    }
    else
    {
      v28 = 0;
    }
    GLogWindow = v28;
    LOBYTE(v81) = 8;
    WLog::OpenWindow(GLogWindow, v17, 0);
    v29 = LocalizeGeneral("Start", "Launch", 0);
    FOutputDevice::Log((char *)GLogWindow + 56, 788, v29);
    if ( GIsClient )
    {
      v30 = (HWND)WWindow::operator HWND____(GLogWindow);
      SetPropA(v30, "IsBrowser", HANDLE_FLAG_INHERIT);
    }
    v31 = appCmdLine();
    GIsBenchmarking = ParseParam(v31, "BENCHMARK");
    if ( GIsBenchmarking )
    {
      v32 = *(_DWORD *)GConfig;
      v62 = (signed int)"System.ini";
      (*(void (__stdcall **)(_DWORD))(v32 + 64))("System.ini");
      v33 = *(_DWORD *)GConfig;
      v62 = (signed int)"User.ini";
      (*(void (__stdcall **)(_DWORD))(v33 + 64))("User.ini");
    }
    FString::FString(&v79);
    LOBYTE(v81) = 10;
    FString::FString(&v78);
    LOBYTE(v81) = 11;
    v34 = 0;
    v35 = appCmdLine();
    if ( ParseParam(v35, "320x240") )
    {
      FString::operator_(&v79, "320");
      FString::operator_(&v78, "240");
      v34 = 1;
    }
    v36 = appCmdLine();
    if ( ParseParam(v36, "512x384") )
    {
      FString::operator_(&v79, "512");
      FString::operator_(&v78, "384");
      v34 = 1;
    }
    v37 = appCmdLine();
    if ( ParseParam(v37, "640x480") )
    {
      FString::operator_(&v79, "640");
      FString::operator_(&v78, "480");
      v34 = 1;
    }
    v38 = appCmdLine();
    if ( ParseParam(v38, "800x600") )
    {
      FString::operator_(&v79, "800");
      FString::operator_(&v78, "600");
      v34 = 1;
    }
    v39 = appCmdLine();
    if ( ParseParam(v39, "1024x768") )
    {
      FString::operator_(&v79, "1024");
      FString::operator_(&v78, "768");
      v34 = 1;
    }
    v40 = appCmdLine();
    if ( ParseParam(v40, "1280x960") )
    {
      FString::operator_(&v79, "1280");
      FString::operator_(&v78, "960");
      v34 = 1;
    }
    v41 = appCmdLine();
    if ( ParseParam(v41, "1280x1024") )
    {
      FString::operator_(&v79, "1280");
      FString::operator_(&v78, "1024");
      v34 = 1;
    }
    v42 = appCmdLine();
    if ( ParseParam(v42, "1600x1200") )
    {
      FString::operator_(&v79, "1600");
      FString::operator_(&v78, "1200");
    }
    else
    {
      if ( !v34 )
      {
LABEL_70:
        v47 = (int)sub_10903880();
        if ( v47 )
        {
          v48 = LocalizeGeneral("Run", "Launch", 0);
          FOutputDevice::Log((char *)GLogWindow + 56, 788, v48);
          sub_10901460();
          FString::FString(&v76);
          LOBYTE(v81) = 12;
          v49 = appCmdLine();
          if ( Parse(v49, "EXEC=", &v76) )
          {
            v50 = *(_DWORD *)(v47 + 72);
            if ( v50 )
            {
              if ( *(_DWORD *)(v50 + 48) & 0x1FFFFFFF )
              {
                v51 = **(_DWORD **)(v50 + 44);
                if ( v51 )
                {
                  if ( GLogWindow )
                    v52 = (char *)GLogWindow + 56;
                  else
                    v52 = 0;
                  v53 = v51 + 44;
                  v54 = FString::operator_(&v76);
                  v55 = *(_DWORD *)v53;
                  v62 = (signed int)v52;
                  v61 = v54;
                  (*(void (__thiscall **)(int, int, char *))v55)(v53, v54, v52);
                }
              }
            }
          }
          if ( !GIsRequestingExit )
            sub_10906DC0(v47);
          LOBYTE(v81) = 11;
          FString::_FString(&v76);
        }
        v56 = *(_DWORD *)(v47 + 76);
        if ( v56 )
          (*(void (**)(void))(*(_DWORD *)v56 + 144))();
        v57 = *(_DWORD *)GFileManager;
        v62 = 0;
        v61 = 0;
        (*(void (__stdcall **)(_DWORD, _DWORD, _DWORD))(v57 + 16))("Running.ini", 0, 0);
        v58 = (HWND)WWindow::operator HWND____(GLogWindow);
        RemovePropA(v58, "IsBrowser");
        v59 = LocalizeGeneral("Exit", "Launch", 0);
        FOutputDevice::Log((char *)GLogWindow + 56, 788, v59);
        if ( GLogWindow )
        {
          v60 = *(_DWORD *)GLogWindow;
          v62 = 1;
          (*(void (__stdcall **)(signed int))(v60 + 4))(1);
        }
        appPreExit();
        GIsGuarded = 0;
        LOBYTE(v81) = 10;
        FString::_FString(&v78);
        LOBYTE(v81) = 8;
        FString::_FString(&v79);
        LOBYTE(v81) = 5;
        CDKeyResponseInterface::_CDKeyResponseInterface(&v68);
        LOBYTE(v81) = 0;
        FString::_FString(&v74);
        v81 = -1;
        appExit();
        result = v73;
        goto LABEL_87;
      }
    }
    v43 = FString::operator_(&v79);
    v44 = *(_DWORD *)GConfig;
    v62 = 0;
    v61 = v43;
    (*(void (__stdcall **)(_DWORD, _DWORD, int, _DWORD))(v44 + 48))(
      "WinDrv.WindowsClient",
      "FullscreenViewportX",
      v43,
      0);
    v45 = FString::operator_(&v78);
    v46 = *(_DWORD *)GConfig;
    v62 = 0;
    v61 = v45;
    (*(void (__stdcall **)(_DWORD, _DWORD, int, _DWORD))(v46 + 48))(
      "WinDrv.WindowsClient",
      "FullscreenViewportY",
      v45,
      0);
    goto LABEL_70;
  }
  while ( !GetPropA(v7, "IsBrowser") )
  {
    v7 = FindWindowExA(v7, 0, &szClass, 0);
    if ( !v7 )
      goto LABEL_18;
  }
  v14 = *v4;
  if ( *v4 )
  {
    while ( v14 != 32 )
    {
      v14 = (v4++)[1];
      if ( !v14 )
        goto LABEL_31;
    }
    goto LABEL_32;
  }
LABEL_31:
  if ( *v4 == 32 )
LABEL_32:
    ++v4;
  lParam = WindowMessageOpen;
  v70 = 4 * appStrlen(v4) + 4;
  v71 = v4;
  SendMessageTimeoutA(v7, 0x4Au, 0, (LPARAM)&lParam, 3u, 0x7530u, (PDWORD_PTR)&hInstance);
  result = 0;
LABEL_87:
  GIsStarted = 0;
  return result;
}
// 10908630: using guessed type int sub_10908630();
// 1090BC36: using guessed type int __thiscall GameSpyCDKeyResponseInterface__GameSpyCDKeyResponseInterface(_DWORD);
// 10943018: using guessed type const char *__fastcall appPackage();
// 1094301C: using guessed type char *__fastcall appStrcpy(char *, const char *);
// 10943024: using guessed type int __fastcall appStrlen(const char *);
// 10943028: using guessed type int __thiscall FString___FString(_DWORD);
// 1094302C: using guessed type int __thiscall FString__FString(_DWORD);
// 10943030: using guessed type const char *__fastcall LocalizeGeneral(const char *, const char *, const char *);
// 10943038: using guessed type int __thiscall FStringTemp___FStringTemp(_DWORD);
// 1094303C: using guessed type void *GFileManager;
// 10943040: using guessed type int __thiscall FString__operator_(_DWORD, _DWORD, _DWORD);
// 10943044: using guessed type int __thiscall FString__FString(_DWORD, _DWORD);
// 10943060: using guessed type int GIsRequestingExit;
// 1094308C: using guessed type int GIsGuarded;
// 109430B8: using guessed type int __thiscall FOutputDevice__Log(_DWORD, _DWORD, _DWORD);
// 109430E0: using guessed type int GIsStarted;
// 109430E4: using guessed type int __thiscall UObject__SetLanguage(_DWORD);
// 109430E8: using guessed type int __fastcall appInit(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 109430EC: using guessed type int GIsServer;
// 109430F0: using guessed type int GIsScriptable;
// 109430F4: using guessed type int GUseFrontEnd;
// 109430F8: using guessed type int GLazyLoad;
// 109430FC: using guessed type int GIsEditor;
// 10943100: using guessed type int GIsClient;
// 10943104: using guessed type int __thiscall FString__operator_(_DWORD);
// 10943108: using guessed type void *GMalloc;
// 10943114: using guessed type void __fastcall appPreExit();
// 10943118: using guessed type void __fastcall appExit();
// 10943124: using guessed type int __thiscall FString__operator_(_DWORD, _DWORD, _DWORD);
// 1094316C: using guessed type int GIsBenchmarking;
// 10943194: using guessed type int __thiscall FName__FName(_DWORD, _DWORD, _DWORD, _DWORD, _DWORD);
// 109431CC: using guessed type int __thiscall TArray_char___TArray_char_(_DWORD, _DWORD, _DWORD);
// 109431EC: using guessed type const char *__fastcall appCmdLine();
// 109431F0: using guessed type int __fastcall ParseParam(const char *, const char *);
// 109431F4: using guessed type int __fastcall Parse(_DWORD, _DWORD, _DWORD);
// 10943200: using guessed type const char *__fastcall appStrfind(const char *, const char *);
// 10943218: using guessed type void *GConfig;
// 10943228: using guessed type int __thiscall FString__operator_(_DWORD, _DWORD);
// 10943260: using guessed type int __thiscall CDKeyResponseInterface___CDKeyResponseInterface(_DWORD);
// 10943450: using guessed type int __thiscall WWindow__operator HWND__ _(_DWORD);
// 109435EC: using guessed type unsigned int WindowMessageOpen;
// 109435F0: using guessed type void __fastcall InitWindowing();
// 109435F4: using guessed type int __thiscall WLog__WLog(_DWORD, _DWORD, _DWORD);
// 109435F8: using guessed type int __thiscall WLog__OpenWindow(_DWORD, _DWORD, _DWORD);
// 10943644: using guessed type void *GLogWindow;
// 10944D38: using guessed type int (*off_10944D38)();
// 1095491C: using guessed type int dword_1095491C;
// 10954928: using guessed type int dword_10954928;
// 1095492C: using guessed type int dword_1095492C;
// 10954930: using guessed type char byte_10954930;