{"metadata":{"callingConvention":"unknown","isExternal":"false","signature":"undefined OnTechResearched(void)","parameterCount":"0","isThunk":"false","returnType":"undefined"},"address":"0x00891790","sizeInBytes":3357,"calleeCount":36,"offset":1,"functionName":"OnTechResearched","startAddress":"0x00891790","callees":[{"address":"0x00429990","signature":"undefined FUN_00429990(void)","name":"FUN_00429990","callCount":1},{"address":"0x0059f1a0","signature":"undefined FUN_0059f1a0(void)","name":"FUN_0059f1a0","callCount":1},{"address":"0x00924d82","signature":"undefined __security_check_cookie(void)","name":"__security_check_cookie","callCount":1},{"address":"0x0088df20","signature":"undefined FUN_0088df20(void)","name":"FUN_0088df20","callCount":1},{"address":"0x0057d610","signature":"undefined GetTechDef(void)","name":"GetTechDef","callCount":1},{"address":"0x00691020","signature":"undefined FUN_00691020(void)","name":"FUN_00691020","callCount":1},{"address":"0x0057e950","signature":"undefined FUN_0057e950(void)","name":"FUN_0057e950","callCount":1},{"address":"0x0074a870","signature":"undefined FUN_0074a870(void)","name":"FUN_0074a870","callCount":2},{"address":"0x00743800","signature":"undefined FUN_00743800(void)","name":"FUN_00743800","callCount":1},{"address":"0x00745e40","signature":"undefined FUN_00745e40(void)","name":"FUN_00745e40","callCount":1},{"address":"0x008186b0","signature":"undefined SetAIBenefit(void)","name":"SetAIBenefit","callCount":1},{"address":"0x00425550","signature":"undefined FUN_00425550(void)","name":"FUN_00425550","callCount":3},{"address":"0x00537240","signature":"undefined GetPlagueCureMask(void)","name":"GetPlagueCureMask","callCount":1},{"address":"0x00425430","signature":"undefined FUN_00425430(void)","name":"FUN_00425430","callCount":5},{"address":"0x004d7960","signature":"undefined ComputeTechBitmasks(void)","name":"ComputeTechBitmasks","callCount":1},{"address":"0x0082bf10","signature":"undefined RebuildSpeciesTechFlags(void)","name":"RebuildSpeciesTechFlags","callCount":1},{"address":"0x007ba1a0","signature":"undefined FUN_007ba1a0(void)","name":"FUN_007ba1a0","callCount":1},{"address":"0x008c8eb0","signature":"undefined FUN_008c8eb0(void)","name":"FUN_008c8eb0","callCount":2},{"address":"0x00691030","signature":"undefined FUN_00691030(void)","name":"FUN_00691030","callCount":1},{"address":"0x00751b60","signature":"undefined FUN_00751b60(void)","name":"FUN_00751b60","callCount":1},{"address":"0x005388a0","signature":"undefined FUN_005388a0(void)","name":"FUN_005388a0","callCount":1},{"address":"0x0078c7e0","signature":"undefined FUN_0078c7e0(void)","name":"FUN_0078c7e0","callCount":1},{"address":"0x004231c0","signature":"undefined FUN_004231c0(void)","name":"FUN_004231c0","callCount":1},{"address":"0x0080e320","signature":"undefined FUN_0080e320(void)","name":"FUN_0080e320","callCount":1},{"address":"0x00924faa","signature":"void operator_delete(void * param_1)","name":"operator_delete","callCount":5},{"address":"0x008862b0","signature":"undefined FUN_008862b0(void)","name":"FUN_008862b0","callCount":2},{"address":"0x0074d070","signature":"undefined FUN_0074d070(void)","name":"FUN_0074d070","callCount":1},{"address":"0x008182c0","signature":"undefined FUN_008182c0(void)","name":"FUN_008182c0","callCount":1},{"address":"0x00756040","signature":"undefined FUN_00756040(void)","name":"FUN_00756040","callCount":1},{"address":"0x0080e410","signature":"undefined SpeciesOfTranslationTech(void)","name":"SpeciesOfTranslationTech","callCount":2},{"address":"0x0080e330","signature":"undefined ApplyAITechBonus(void)","name":"ApplyAITechBonus","callCount":1},{"address":"0x0057d5d0","signature":"undefined IsTech(void)","name":"IsTech","callCount":33},{"address":"0x005862d0","signature":"undefined FUN_005862d0(void)","name":"FUN_005862d0","callCount":1},{"address":"0x0057d810","signature":"undefined HasResearched(void)","name":"HasResearched","callCount":2},{"address":"0x008c97f0","signature":"undefined FUN_008c97f0(void)","name":"FUN_008c97f0","callCount":2},{"address":"0x00753510","signature":"undefined FUN_00753510(void)","name":"FUN_00753510","callCount":1}],"inputAddress":"0x00891790","decompSignature":"void __thiscall Game::ServerPlayer::OnTechResearched(int param_1,char *param_2,char param_3);","programName":"Sword of the Stars.exe","isUndefinedFunction":false,"resolvedFrom":"address/symbol","totalLines":691,"limit":1000,"decompilation":"   1\t\n   2\t/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */\n   3\t/* ServerPlayer::OnTechResearched(TechDef* def, bool silent) - vft slot 4, called from\n   4\t   TechTree::SetResearched. Hard-coded strategic tech effects: chain of MasterTechTree::IsTech(def,\n   5\t   10000+i) tests writing ServerPlayer fields\n   6\t   (ConMod/SavMod/OutMod/PopMod/TerraMod/SuitTol/MaxOH/MinRate/pddm/CstR-E-T/PrGtTrf/flags). See\n   7\t   /srv/re-lab/handoff/tech-effects.md for the id->effect table. Tail: plague-cure mask\n   8\t   (HasImm/HasVac), tech bitmasks (+0x190/+0x194), RebuildSpeciesTechFlags, Zuul CruisCon->free\n   9\t   BrdPod, cdp=SpyBm&&SlvgTech, EVENT_TEMPERANCE cure. */\n  10\t\n  11\tvoid __thiscall Game::ServerPlayer::OnTechResearched(int param_1,char *param_2,char param_3)\n  12\t\n  13\t{\n  14\t  undefined4 uVar1;\n  15\t  float fVar2;\n  16\t  float fVar3;\n  17\t  char cVar4;\n  18\t  byte bVar5;\n  19\t  char *pcVar6;\n  20\t  undefined4 *puVar7;\n  21\t  undefined1 *puVar8;\n  22\t  int iVar9;\n  23\t  int *piVar10;\n  24\t  char *pcVar11;\n  25\t  uint uVar12;\n  26\t  float10 fVar13;\n  27\t  longlong lVar14;\n  28\t  char local_204 [12];\n  29\t  undefined4 uStack_1f8;\n  30\t  void **local_1f4;\n  31\t  undefined4 local_1f0;\n  32\t  undefined4 uStack_1ec;\n  33\t  char local_1e8 [8];\n  34\t  undefined4 uStack_1e0;\n  35\t  char *pcStack_1dc;\n  36\t  void **local_1d8;\n  37\t  undefined4 local_1d4;\n  38\t  int iStack_1d0;\n  39\t  undefined4 uStack_1cc;\n  40\t  undefined1 *puStack_1c8;\n  41\t  int iStack_1c4;\n  42\t  char *pcStack_1c0;\n  43\t  undefined1 local_1a8 [4];\n  44\t  char *local_1a4;\n  45\t  uint local_1a0;\n  46\t  undefined8 local_19c;\n  47\t  char *local_194;\n  48\t  char local_18d;\n  49\t  int local_18c;\n  50\t  void *local_188 [4];\n  51\t  undefined4 local_178;\n  52\t  uint local_174;\n  53\t  void *local_16c [4];\n  54\t  undefined4 local_15c;\n  55\t  uint local_158;\n  56\t  void *local_150;\n  57\t  undefined1 local_14c [12];\n  58\t  undefined4 local_140;\n  59\t  uint local_13c;\n  60\t  void *local_134 [3];\n  61\t  int local_128;\n  62\t  int local_124;\n  63\t  uint local_120;\n  64\t  char local_118 [256];\n  65\t  undefined1 local_18;\n  66\t  uint local_14;\n  67\t  void *local_10;\n  68\t  undefined1 *puStack_c;\n  69\t  int local_8;\n  70\t  \n  71\t  local_8 = 0xffffffff;\n  72\t  puStack_c = &LAB_0099c1a3;\n  73\t  local_10 = ExceptionList;\n  74\t  local_14 = DAT_00af8b78 ^ (uint)&stack0xfffffffc;\n  75\t  ExceptionList = &local_10;\n  76\t  local_1a4 = param_2;\n  77\t  puStack_1c8 = (undefined1 *)0x8917e1;\n  78\t  iStack_1c4 = param_1;\n  79\t  pcStack_1c0 = (char *)param_1;\n  80\t  FUN_007ba1a0();\n  81\t  if (*(char **)(param_1 + 0x294) == param_2) {\n  82\t    if (*(char *)(param_1 + 0x3b4) != '\\0') {\n  83\t      FUN_0088df20();\n  84\t    }\n  85\t    *(undefined1 *)(param_1 + 0x3b4) = 0;\n  86\t    *(undefined4 *)(param_1 + 0x294) = 0;\n  87\t  }\n  88\t  if (param_3 == '\\0') {\n  89\t    local_194 = *(char **)(*(int *)(param_1 + 8) + 8);\n  90\t    local_18c = (int)(param_2 + 0x40);\n  91\t    if (0xf < *(uint *)(param_2 + 0x54)) {\n  92\t      local_18c = *(int *)local_18c;\n  93\t    }\n  94\t    pcStack_1c0 = \"\";\n  95\t    local_18 = 0;\n  96\t    local_120 = 0xf;\n  97\t    local_124 = 0;\n  98\t    local_134[0] = (void *)((uint)local_134[0] & 0xffffff00);\n  99\t    iStack_1c4 = 0x89185c;\n 100\t    FUN_00425550();\n 101\t    local_8 = 0;\n 102\t    pcStack_1c0 = (char *)0x89186b;\n 103\t    fVar13 = (float10)FUN_0057e950();\n 104\t    pcStack_1c0 = (char *)0x0;\n 105\t    iStack_1c4 = 0;\n 106\t    puStack_1c8 = (undefined1 *)0x0;\n 107\t    uStack_1cc = 0;\n 108\t    iStack_1d0 = local_18c;\n 109\t    pcStack_1dc = local_118;\n 110\t    if ((float)_DAT_009e20c8 <= (float)fVar13) {\n 111\t      pcVar11 = *(char **)PTR_PTR_00af09ec;\n 112\t      local_1d4 = *(undefined4 *)PTR_PTR_00af09f4;\n 113\t      local_1d8 = (void **)0x100;\n 114\t      local_19c._4_4_ = \"EVENT_RESEARCH_COMPLETE\";\n 115\t      uStack_1e0 = 0x8918fe;\n 116\t      FUN_008c8eb0();\n 117\t      pcVar6 = local_118;\n 118\t      do {\n 119\t        cVar4 = *pcVar6;\n 120\t        pcVar6 = pcVar6 + 1;\n 121\t      } while (cVar4 != '\\0');\n 122\t    }\n 123\t    else {\n 124\t      pcVar11 = *(char **)PTR_PTR_00af09fc;\n 125\t      local_1d4 = *(undefined4 *)PTR_PTR_00af0a04;\n 126\t      local_1d8 = (void **)0x100;\n 127\t      local_19c._4_4_ = \"EVENT_RESEARCH_UNDERBUDGET\";\n 128\t      uStack_1e0 = 0x8918c0;\n 129\t      FUN_008c8eb0();\n 130\t      pcVar6 = local_118;\n 131\t      do {\n 132\t        cVar4 = *pcVar6;\n 133\t        pcVar6 = pcVar6 + 1;\n 134\t      } while (cVar4 != '\\0');\n 135\t    }\n 136\t    pcStack_1c0 = local_118;\n 137\t    iStack_1c4 = 0x89192c;\n 138\t    FUN_00425550();\n 139\t    pcStack_1c0 = local_19c._4_4_;\n 140\t    iStack_1c4 = (int)local_194;\n 141\t    puStack_1c8 = (undefined1 *)0x0;\n 142\t    uStack_1cc = 0;\n 143\t    local_19c._4_4_ = local_1e8;\n 144\t    uStack_1ec = 0xffffffff;\n 145\t    local_1f0 = 0;\n 146\t    local_1f4 = local_134;\n 147\t    local_1d4 = 0xf;\n 148\t    local_1d8 = (void **)0x0;\n 149\t    local_1e8[0] = '\\0';\n 150\t    uStack_1f8 = 0x89196c;\n 151\t    FUN_00425430();\n 152\t    local_194 = pcVar11 + 1;\n 153\t    local_1f0 = 0xf;\n 154\t    local_1f4 = (void **)0x0;\n 155\t    local_8._0_1_ = 1;\n 156\t    local_204[0] = '\\0';\n 157\t    pcVar6 = pcVar11;\n 158\t    do {\n 159\t      cVar4 = *pcVar6;\n 160\t      pcVar6 = pcVar6 + 1;\n 161\t    } while (cVar4 != '\\0');\n 162\t    FUN_00425550(pcVar11,(int)pcVar6 - (int)local_194);\n 163\t    local_8 = (uint)local_8._1_3_ << 8;\n 164\t    FUN_008862b0();\n 165\t    local_8 = 0xffffffff;\n 166\t    if (0xf < local_120) {\n 167\t                    /* WARNING: Subroutine does not return */\n 168\t      pcStack_1c0 = &UNK_008919d6;\n 169\t      operator_delete(local_134[0]);\n 170\t    }\n 171\t  }\n 172\t  local_18c = *(undefined4 *)(*(int *)(param_1 + 0xf4) + 4);\n 173\t  pcStack_1c0 = param_2;\n 174\t  iStack_1c4 = 0x8919f5;\n 175\t  cVar4 = MasterTechTree::IsTech();\n 176\t  if (cVar4 != '\\0') {\n 177\t    *(undefined1 *)(param_1 + 0x103) = 1;\n 178\t    local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 179\t    goto LAB_00892156;\n 180\t  }\n 181\t  pcStack_1c0 = param_2;\n 182\t  iStack_1c4 = 0x891a12;\n 183\t  cVar4 = MasterTechTree::IsTech();\n 184\t  if (cVar4 == '\\0') {\n 185\t    pcStack_1c0 = param_2;\n 186\t    iStack_1c4 = 0x891a23;\n 187\t    cVar4 = MasterTechTree::IsTech();\n 188\t    if (cVar4 != '\\0') {\n 189\t      fVar2 = (float)_DAT_009e5060;\n 190\t      *(float *)(param_1 + 0x10c) = *(float *)(param_1 + 0x10c) - fVar2;\n 191\t      *(float *)(param_1 + 0x110) = *(float *)(param_1 + 0x110) - fVar2;\n 192\t      *(float *)(param_1 + 0x114) = *(float *)(param_1 + 0x114) - fVar2;\n 193\t      *(float *)(param_1 + 0x124) = *(float *)(param_1 + 0x124) + (float)_DAT_009e20d8;\n 194\t      local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 195\t      goto LAB_00892156;\n 196\t    }\n 197\t    pcStack_1c0 = param_2;\n 198\t    iStack_1c4 = 0x891a7b;\n 199\t    cVar4 = MasterTechTree::IsTech();\n 200\t    if (cVar4 == '\\0') {\n 201\t      pcStack_1c0 = param_2;\n 202\t      iStack_1c4 = 0x891ad3;\n 203\t      cVar4 = MasterTechTree::IsTech();\n 204\t      if (cVar4 != '\\0') {\n 205\t        fVar2 = (float)_DAT_009e5060;\n 206\t        *(float *)(param_1 + 0x118) = *(float *)(param_1 + 0x118) - fVar2;\n 207\t        *(float *)(param_1 + 0x11c) = *(float *)(param_1 + 0x11c) - fVar2;\n 208\t        *(float *)(param_1 + 0x120) = *(float *)(param_1 + 0x120) - fVar2;\n 209\t        local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 210\t        goto LAB_00892156;\n 211\t      }\n 212\t      pcStack_1c0 = param_2;\n 213\t      iStack_1c4 = 0x891b19;\n 214\t      cVar4 = MasterTechTree::IsTech();\n 215\t      if (cVar4 == '\\0') {\n 216\t        pcStack_1c0 = param_2;\n 217\t        iStack_1c4 = 0x891b3f;\n 218\t        cVar4 = MasterTechTree::IsTech();\n 219\t        if (cVar4 != '\\0') {\n 220\t          *(float *)(param_1 + 0x124) = *(float *)(param_1 + 0x124) + (float)_DAT_009e5df0;\n 221\t          local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 222\t          goto LAB_00892156;\n 223\t        }\n 224\t        pcStack_1c0 = param_2;\n 225\t        iStack_1c4 = 0x891b67;\n 226\t        cVar4 = MasterTechTree::IsTech();\n 227\t        if (cVar4 != '\\0') {\n 228\t          *(float *)(param_1 + 0x124) = *(float *)(param_1 + 0x124) + (float)_DAT_009e2318;\n 229\t          local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 230\t          goto LAB_00892156;\n 231\t        }\n 232\t        pcStack_1c0 = param_2;\n 233\t        iStack_1c4 = 0x891b8f;\n 234\t        cVar4 = MasterTechTree::IsTech();\n 235\t        if (cVar4 != '\\0') {\n 236\t          *(undefined1 *)(param_1 + 0x138) = 1;\n 237\t          local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 238\t          goto LAB_00892156;\n 239\t        }\n 240\t        pcStack_1c0 = param_2;\n 241\t        iStack_1c4 = 0x891bac;\n 242\t        cVar4 = MasterTechTree::IsTech();\n 243\t        if (cVar4 != '\\0') {\n 244\t          pcStack_1c0 = (char *)(param_1 + 0xb8);\n 245\t          local_194 = _DAT_009e22f0;\n 246\t          iStack_1c4 = 0x891bcf;\n 247\t          puVar7 = (undefined4 *)FUN_004231c0();\n 248\t          *(undefined4 *)(param_1 + 0xb8) = *puVar7;\n 249\t          *(float *)(param_1 + 0x140) = *(float *)(param_1 + 0x140) + (float)_DAT_009e1ef0;\n 250\t          local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 251\t          goto LAB_00892156;\n 252\t        }\n 253\t        pcStack_1c0 = param_2;\n 254\t        iStack_1c4 = 0x891bfe;\n 255\t        cVar4 = MasterTechTree::IsTech();\n 256\t        if (cVar4 != '\\0') {\n 257\t          *(float *)(param_1 + 0x130) = *(float *)(param_1 + 0x130) + (float)_DAT_009e2318;\n 258\t          local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 259\t          goto LAB_00892156;\n 260\t        }\n 261\t        pcStack_1c0 = param_2;\n 262\t        iStack_1c4 = 0x891c26;\n 263\t        cVar4 = MasterTechTree::IsTech();\n 264\t        if (cVar4 != '\\0') {\n 265\t          *(float *)(param_1 + 0xb4) = *(float *)(param_1 + 0xb4) + (float)_DAT_009e8d28;\n 266\t          *(float *)(param_1 + 0x130) = *(float *)(param_1 + 0x130) + (float)_DAT_00a33360;\n 267\t          *(float *)(param_1 + 0x134) = *(float *)(param_1 + 0x134) + (float)_DAT_009f15b0;\n 268\t          local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 269\t          goto LAB_00892156;\n 270\t        }\n 271\t        pcStack_1c0 = param_2;\n 272\t        iStack_1c4 = 0x891c72;\n 273\t        cVar4 = MasterTechTree::IsTech();\n 274\t        if (cVar4 == '\\0') {\n 275\t          pcStack_1c0 = param_2;\n 276\t          iStack_1c4 = 0x891c9a;\n 277\t          cVar4 = MasterTechTree::IsTech();\n 278\t          if (cVar4 != '\\0') {\n 279\t            *(float *)(param_1 + 0xb4) = *(float *)(param_1 + 0xb4) + (float)_DAT_009e90b8;\n 280\t            *(float *)(param_1 + 0x130) = *(float *)(param_1 + 0x130) + (float)_DAT_009e2318;\n 281\t            *(float *)(param_1 + 0x134) = *(float *)(param_1 + 0x134) + (float)_DAT_009f15b0;\n 282\t            local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 283\t            goto LAB_00892156;\n 284\t          }\n 285\t          pcStack_1c0 = param_2;\n 286\t          iStack_1c4 = 0x891ce6;\n 287\t          cVar4 = MasterTechTree::IsTech();\n 288\t          if (cVar4 != '\\0') {\n 289\t            uVar12 = 0;\n 290\t            local_128 = 0;\n 291\t            local_124 = 0;\n 292\t            local_120 = 0;\n 293\t            local_8 = 2;\n 294\t            if (*(int *)(param_1 + 0x34) - *(int *)(param_1 + 0x30) >> 2 != 0) {\n 295\t              do {\n 296\t                local_194 = *(char **)(*(int *)(param_1 + 0x30) + uVar12 * 4);\n 297\t                lVar14 = FUN_0074d070();\n 298\t                local_19c = lVar14;\n 299\t                lVar14 = FUN_0074a870();\n 300\t                if (lVar14 == local_19c) {\n 301\t                  pcStack_1c0 = (char *)0x891d68;\n 302\t                  FUN_0059f1a0();\n 303\t                }\n 304\t                uVar12 = uVar12 + 1;\n 305\t              } while (uVar12 < (uint)(*(int *)(param_1 + 0x34) - *(int *)(param_1 + 0x30) >> 2));\n 306\t            }\n 307\t            fVar2 = (float)_DAT_009ed188;\n 308\t            uVar12 = 0;\n 309\t            *(undefined1 *)(param_1 + 0x104) = 1;\n 310\t            *(float *)(param_1 + 0x130) = *(float *)(param_1 + 0x130) + fVar2;\n 311\t            if (local_124 - local_128 >> 2 != 0) {\n 312\t              do {\n 313\t                uVar1 = *(undefined4 *)(local_128 + uVar12 * 4);\n 314\t                FUN_005388a0();\n 315\t                local_8._0_1_ = 3;\n 316\t                pcStack_1c0 = (char *)FUN_0074a870();\n 317\t                puStack_1c8 = local_14c;\n 318\t                uStack_1cc = 0x891dd8;\n 319\t                iStack_1c4 = uVar1;\n 320\t                FUN_00756040();\n 321\t                pcStack_1c0 = (char *)0x891de9;\n 322\t                FUN_00753510();\n 323\t                local_8 = CONCAT31(local_8._1_3_,2);\n 324\t                FUN_00751b60();\n 325\t                uVar12 = uVar12 + 1;\n 326\t              } while (uVar12 < (uint)(local_124 - local_128 >> 2));\n 327\t            }\n 328\t            local_8 = 0xffffffff;\n 329\t            FUN_00429990();\n 330\t            param_2 = local_1a4;\n 331\t            goto LAB_00892156;\n 332\t          }\n 333\t          pcStack_1c0 = param_2;\n 334\t          iStack_1c4 = 0x891e3e;\n 335\t          cVar4 = MasterTechTree::IsTech();\n 336\t          if (cVar4 != '\\0') {\n 337\t            *(float *)(param_1 + 0x134) = *(float *)(param_1 + 0x134) + (float)_DAT_009e5068;\n 338\t            local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 339\t            goto LAB_00892156;\n 340\t          }\n 341\t          pcStack_1c0 = param_2;\n 342\t          iStack_1c4 = 0x891e66;\n 343\t          cVar4 = MasterTechTree::IsTech();\n 344\t          if (cVar4 == '\\0') {\n 345\t            pcStack_1c0 = param_2;\n 346\t            iStack_1c4 = 0x891e8e;\n 347\t            cVar4 = MasterTechTree::IsTech();\n 348\t            if (cVar4 != '\\0') {\n 349\t              *(float *)(param_1 + 0x134) = *(float *)(param_1 + 0x134) + (float)_DAT_009e20a0;\n 350\t              local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 351\t              goto LAB_00892156;\n 352\t            }\n 353\t            pcStack_1c0 = param_2;\n 354\t            iStack_1c4 = 0x891eb6;\n 355\t            cVar4 = MasterTechTree::IsTech();\n 356\t            piVar10 = (int *)PTR_DAT_00aedfe0;\n 357\t            if (cVar4 == '\\0') {\n 358\t              pcStack_1c0 = param_2;\n 359\t              iStack_1c4 = 0x891ecf;\n 360\t              cVar4 = MasterTechTree::IsTech();\n 361\t              piVar10 = (int *)PTR_DAT_00aedfe4;\n 362\t              if (cVar4 == '\\0') {\n 363\t                pcStack_1c0 = param_2;\n 364\t                iStack_1c4 = 0x891f03;\n 365\t                cVar4 = MasterTechTree::IsTech();\n 366\t                if (cVar4 != '\\0') {\n 367\t                  *(undefined4 *)(param_1 + 0x150) = _DAT_00a2bed0;\n 368\t                  *(undefined4 *)(param_1 + 0x154) = _DAT_009e5840;\n 369\t                  *(undefined4 *)(param_1 + 0x158) = 0x3f800000;\n 370\t                  local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 371\t                  goto LAB_00892156;\n 372\t                }\n 373\t                pcStack_1c0 = param_2;\n 374\t                iStack_1c4 = 0x891f39;\n 375\t                cVar4 = MasterTechTree::IsTech();\n 376\t                if (cVar4 == '\\0') {\n 377\t                  pcStack_1c0 = param_2;\n 378\t                  iStack_1c4 = 0x891f4a;\n 379\t                  cVar4 = MasterTechTree::IsTech();\n 380\t                  if (cVar4 == '\\0') {\n 381\t                    pcStack_1c0 = param_2;\n 382\t                    iStack_1c4 = 0x891f5b;\n 383\t                    cVar4 = MasterTechTree::IsTech();\n 384\t                    if (cVar4 == '\\0') {\n 385\t                      pcStack_1c0 = param_2;\n 386\t                      iStack_1c4 = 0x891f86;\n 387\t                      cVar4 = MasterTechTree::IsTech();\n 388\t                      if (cVar4 != '\\0') {\n 389\t                        uVar12 = 0;\n 390\t                        if (*(int *)(param_1 + 0x34) - *(int *)(param_1 + 0x30) >> 2 != 0) {\n 391\t                          do {\n 392\t                            *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x30) + uVar12 * 4) + 0x188)\n 393\t                                 = 1;\n 394\t                            uVar12 = uVar12 + 1;\n 395\t                          } while (uVar12 < (uint)(*(int *)(param_1 + 0x34) -\n 396\t                                                   *(int *)(param_1 + 0x30) >> 2));\n 397\t                        }\n 398\t                        local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 399\t                        if (*(int *)(param_1 + 0x3b8) != 0) {\n 400\t                          FUN_00691030();\n 401\t                          local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 402\t                        }\n 403\t                        goto LAB_00892156;\n 404\t                      }\n 405\t                      pcStack_1c0 = param_2;\n 406\t                      iStack_1c4 = 0x891fe0;\n 407\t                      cVar4 = MasterTechTree::IsTech();\n 408\t                      if (cVar4 != '\\0') {\n 409\t                        uVar12 = 0;\n 410\t                        if (*(int *)(param_1 + 0x34) - *(int *)(param_1 + 0x30) >> 2 != 0) {\n 411\t                          do {\n 412\t                            *(undefined1 *)(*(int *)(*(int *)(param_1 + 0x30) + uVar12 * 4) + 0x188)\n 413\t                                 = 1;\n 414\t                            uVar12 = uVar12 + 1;\n 415\t                          } while (uVar12 < (uint)(*(int *)(param_1 + 0x34) -\n 416\t                                                   *(int *)(param_1 + 0x30) >> 2));\n 417\t                        }\n 418\t                        pcStack_1c0 = (char *)0x892017;\n 419\t                        SetAIBenefit();\n 420\t                        local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 421\t                        if (*(int *)(param_1 + 0x3b8) != 0) {\n 422\t                          FUN_00691020();\n 423\t                          local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 424\t                        }\n 425\t                        goto LAB_00892156;\n 426\t                      }\n 427\t                      iVar9 = SpeciesOfTranslationTech();\n 428\t                      if (iVar9 != -1) {\n 429\t                        bVar5 = SpeciesOfTranslationTech();\n 430\t                        *(uint *)(param_1 + 0x290) =\n 431\t                             *(uint *)(param_1 + 0x290) | 1 << (bVar5 & 0x1f);\n 432\t                        local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 433\t                        goto LAB_00892156;\n 434\t                      }\n 435\t                      pcStack_1c0 = param_2;\n 436\t                      iStack_1c4 = 0x89206d;\n 437\t                      cVar4 = MasterTechTree::IsTech();\n 438\t                      if (cVar4 != '\\0') {\n 439\t                        local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 440\t                        if (*(char *)(param_1 + 0xfc) == '\\0') {\n 441\t                          *(undefined1 *)(param_1 + 0xff) = 1;\n 442\t                          local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 443\t                        }\n 444\t                        goto LAB_00892156;\n 445\t                      }\n 446\t                      pcStack_1c0 = param_2;\n 447\t                      iStack_1c4 = 0x892097;\n 448\t                      cVar4 = MasterTechTree::IsTech();\n 449\t                      if (cVar4 != '\\0') {\n 450\t                        *(undefined1 *)(param_1 + 0x100) = 1;\n 451\t                        goto LAB_00892156;\n 452\t                      }\n 453\t                      pcStack_1c0 = param_2;\n 454\t                      iStack_1c4 = 0x8920b4;\n 455\t                      cVar4 = MasterTechTree::IsTech();\n 456\t                      if (cVar4 != '\\0') {\n 457\t                        *(undefined1 *)(param_1 + 0x102) = 1;\n 458\t                        goto LAB_00892156;\n 459\t                      }\n 460\t                      pcStack_1c0 = param_2;\n 461\t                      iStack_1c4 = 0x8920d1;\n 462\t                      cVar4 = MasterTechTree::IsTech();\n 463\t                      if (cVar4 != '\\0') {\n 464\t                        *(undefined1 *)(param_1 + 0x101) = 1;\n 465\t                        goto LAB_00892156;\n 466\t                      }\n 467\t                      pcStack_1c0 = param_2;\n 468\t                      iStack_1c4 = 0x8920eb;\n 469\t                      cVar4 = MasterTechTree::IsTech();\n 470\t                      if (cVar4 != '\\0') {\n 471\t                        *(float *)(param_1 + 0x108) =\n 472\t                             *(float *)(param_1 + 0x108) * (float)_PTR_009e5d70;\n 473\t                        *(float *)(param_1 + 0x124) =\n 474\t                             *(float *)(param_1 + 0x124) * (float)_DAT_009e23a0;\n 475\t                        goto LAB_00892156;\n 476\t                      }\n 477\t                      pcStack_1c0 = param_2;\n 478\t                      iStack_1c4 = 0x892122;\n 479\t                      cVar4 = MasterTechTree::IsTech();\n 480\t                      if (cVar4 == '\\0') goto LAB_00892156;\n 481\t                      fVar3 = (float)_DAT_009e5060;\n 482\t                      *(float *)(param_1 + 0x10c) = *(float *)(param_1 + 0x10c) - fVar3;\n 483\t                      fVar2 = *(float *)(param_1 + 0x110) - fVar3;\n 484\t                      goto LAB_00892144;\n 485\t                    }\n 486\t                  }\n 487\t                }\n 488\t                local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 489\t                if (*(char *)(param_1 + 0xfe) != '\\0') {\n 490\t                  pcStack_1c0 = (char *)0x891f74;\n 491\t                  ApplyAITechBonus();\n 492\t                  local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 493\t                }\n 494\t                goto LAB_00892156;\n 495\t              }\n 496\t            }\n 497\t            if (*piVar10 <= *(int *)(param_1 + 0x148)) {\n 498\t              piVar10 = (int *)(param_1 + 0x148);\n 499\t            }\n 500\t            *(int *)(param_1 + 0x148) = *piVar10;\n 501\t            local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 502\t            goto LAB_00892156;\n 503\t          }\n 504\t        }\n 505\t        else {\n 506\t          *(float *)(param_1 + 0x130) = *(float *)(param_1 + 0x130) + (float)_DAT_009e20d8;\n 507\t        }\n 508\t        *(float *)(param_1 + 0x134) = *(float *)(param_1 + 0x134) + (float)_DAT_00a33358;\n 509\t        local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 510\t      }\n 511\t      else {\n 512\t        fVar3 = (float)_DAT_009e5060;\n 513\t        fVar2 = *(float *)(param_1 + 0x110) - fVar3;\n 514\tLAB_00892144:\n 515\t        *(float *)(param_1 + 0x110) = fVar2;\n 516\t        *(float *)(param_1 + 0x114) = *(float *)(param_1 + 0x114) - fVar3;\n 517\t        local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 518\t      }\n 519\t      goto LAB_00892156;\n 520\t    }\n 521\t  }\n 522\t  fVar2 = (float)_DAT_009e2318;\n 523\t  *(float *)(param_1 + 0x10c) = *(float *)(param_1 + 0x10c) - fVar2;\n 524\t  *(float *)(param_1 + 0x110) = *(float *)(param_1 + 0x110) - fVar2;\n 525\t  *(float *)(param_1 + 0x114) = *(float *)(param_1 + 0x114) - fVar2;\n 526\t  *(float *)(param_1 + 0x124) = *(float *)(param_1 + 0x124) + (float)_DAT_009ed188;\n 527\t  local_19c = CONCAT44(local_19c._4_4_,(undefined4)local_19c);\n 528\tLAB_00892156:\n 529\t  local_1a0 = 0;\n 530\t  iStack_1c4 = 0x89216d;\n 531\t  pcStack_1c0 = param_2;\n 532\t  cVar4 = TechDef::GetPlagueCureMask();\n 533\t  if (cVar4 != '\\0') {\n 534\t    *(uint *)(param_1 + 0x28c) = *(uint *)(param_1 + 0x28c) | local_1a0;\n 535\t    *(uint *)(param_1 + 0x288) = *(uint *)(param_1 + 0x288) | local_1a0;\n 536\t    iStack_1c4 = 0x89219b;\n 537\t    pcStack_1c0 = (char *)param_1;\n 538\t    FUN_0078c7e0();\n 539\t  }\n 540\t  pcStack_1c0 = local_1a8;\n 541\t  iStack_1c4 = 0x8921ae;\n 542\t  puVar7 = (undefined4 *)ComputeTechBitmasks();\n 543\t  *(undefined4 *)(param_1 + 400) = *puVar7;\n 544\t  *(undefined4 *)(param_1 + 0x194) = puVar7[1];\n 545\t  FUN_008182c0();\n 546\t  RebuildSpeciesTechFlags();\n 547\t  iStack_1c4 = 0x8921dd;\n 548\t  pcStack_1c0 = param_2;\n 549\t  cVar4 = MasterTechTree::IsTech();\n 550\t  if ((cVar4 != '\\0') && (*(int *)(param_1 + 0x5c) == 5)) {\n 551\t    pcStack_1c0 = (char *)0x8921f3;\n 552\t    puVar8 = (undefined1 *)MasterTechTree::GetTechDef();\n 553\t    if (puVar8 != (undefined1 *)0x0) {\n 554\t      pcStack_1c0 = (char *)0x1;\n 555\t      iStack_1c4 = 1;\n 556\t      uStack_1cc = 0x892209;\n 557\t      puStack_1c8 = puVar8;\n 558\t      FUN_005862d0();\n 559\t    }\n 560\t  }\n 561\t  if (*(char *)(param_1 + 0x330) == '\\0') {\n 562\t    pcStack_1c0 = (char *)0x892222;\n 563\t    cVar4 = TechTree::HasResearched();\n 564\t    if (cVar4 != '\\0') {\n 565\t      pcStack_1c0 = (char *)0x892236;\n 566\t      cVar4 = TechTree::HasResearched();\n 567\t      if (cVar4 != '\\0') {\n 568\t        *(undefined1 *)(param_1 + 0x330) = 1;\n 569\t      }\n 570\t    }\n 571\t  }\n 572\t  local_19c._4_4_ = (char *)(param_1 + 0x348);\n 573\t  local_18c = 0;\n 574\t  do {\n 575\t    if ((*(uint *)local_19c._4_4_ >> 5 & 1) != 0) {\n 576\t      uVar12 = 0;\n 577\t      local_18d = '\\0';\n 578\t      if (*(int *)(param_1 + 0x34) - *(int *)(param_1 + 0x30) >> 2 != 0) {\n 579\t        do {\n 580\t          pcStack_1c0 = (char *)0x892294;\n 581\t          cVar4 = FUN_00745e40();\n 582\t          if (cVar4 != '\\0') {\n 583\t            pcStack_1c0 = (char *)0x8922a6;\n 584\t            FUN_00743800();\n 585\t            local_18d = '\\x01';\n 586\t          }\n 587\t          uVar12 = uVar12 + 1;\n 588\t        } while (uVar12 < (uint)(*(int *)(param_1 + 0x34) - *(int *)(param_1 + 0x30) >> 2));\n 589\t      }\n 590\t      if ((param_3 == '\\0') && (local_18d != '\\0')) {\n 591\t        local_1d4 = *(undefined4 *)PTR_PTR_00af0a8c;\n 592\t        pcStack_1c0 = (char *)0x0;\n 593\t        iStack_1c4 = 0;\n 594\t        puStack_1c8 = (undefined1 *)0x0;\n 595\t        uStack_1cc = 0;\n 596\t        iStack_1d0 = 0;\n 597\t        local_1d8 = local_134;\n 598\t        pcStack_1dc = (char *)0x8922ee;\n 599\t        iStack_1c4 = FUN_008c97f0();\n 600\t        pcStack_1c0 = (char *)0x0;\n 601\t        local_8 = 4;\n 602\t        local_158 = 0xf;\n 603\t        local_15c = 0;\n 604\t        local_16c[0] = (void *)((uint)local_16c[0] & 0xffffff00);\n 605\t        puStack_1c8 = (undefined1 *)0x89231e;\n 606\t        FUN_00425430();\n 607\t        local_8._0_1_ = 6;\n 608\t        if (0xf < local_120) {\n 609\t                    /* WARNING: Subroutine does not return */\n 610\t          pcStack_1c0 = &UNK_00892337;\n 611\t          operator_delete(local_134[0]);\n 612\t        }\n 613\t        local_1d4 = *(undefined4 *)PTR_PTR_00af0a94;\n 614\t        pcStack_1c0 = (char *)0x0;\n 615\t        iStack_1c4 = 0;\n 616\t        puStack_1c8 = (undefined1 *)0x0;\n 617\t        uStack_1cc = 0;\n 618\t        iStack_1d0 = 0;\n 619\t        local_1d8 = local_188;\n 620\t        local_120 = 0xf;\n 621\t        local_124 = 0;\n 622\t        local_134[0] = (void *)((uint)local_134[0] & 0xffffff00);\n 623\t        pcStack_1dc = (char *)0x892368;\n 624\t        iStack_1c4 = FUN_008c97f0();\n 625\t        pcStack_1c0 = (char *)0x0;\n 626\t        local_8._0_1_ = 7;\n 627\t        local_13c = 0xf;\n 628\t        local_140 = 0;\n 629\t        local_150 = (void *)((uint)local_150 & 0xffffff00);\n 630\t        puStack_1c8 = (undefined1 *)0x892391;\n 631\t        FUN_00425430();\n 632\t        local_8._0_1_ = 9;\n 633\t        if (0xf < local_174) {\n 634\t                    /* WARNING: Subroutine does not return */\n 635\t          pcStack_1c0 = &UNK_008923aa;\n 636\t          operator_delete(local_188[0]);\n 637\t        }\n 638\t        pcStack_1c0 = \"EVENT_TEMPERANCE\";\n 639\t        local_174 = 0xf;\n 640\t        local_178 = 0;\n 641\t        local_188[0] = (void *)((uint)local_188[0] & 0xffffff00);\n 642\t        iStack_1c4 = 0x8923cd;\n 643\t        iVar9 = FUN_0080e320();\n 644\t        iStack_1c4 = *(undefined4 *)(iVar9 + 0xc);\n 645\t        puStack_1c8 = (undefined1 *)0x0;\n 646\t        uStack_1cc = 0;\n 647\t        local_1a4 = local_1e8;\n 648\t        uStack_1ec = 0xffffffff;\n 649\t        local_1f0 = 0;\n 650\t        local_1f4 = &local_150;\n 651\t        local_1d4 = 0xf;\n 652\t        local_1d8 = (void **)0x0;\n 653\t        local_1e8[0] = '\\0';\n 654\t        uStack_1f8 = 0x8923f6;\n 655\t        FUN_00425430();\n 656\t        local_194 = local_204;\n 657\t        local_1f0 = 0xf;\n 658\t        local_1f4 = (void **)0x0;\n 659\t        local_8._0_1_ = 10;\n 660\t        local_204[0] = '\\0';\n 661\t        FUN_00425430(local_16c,0,0xffffffff);\n 662\t        local_8 = CONCAT31(local_8._1_3_,9);\n 663\t        FUN_008862b0();\n 664\t        if (0xf < local_13c) {\n 665\t                    /* WARNING: Subroutine does not return */\n 666\t          pcStack_1c0 = &UNK_00892441;\n 667\t          operator_delete(local_150);\n 668\t        }\n 669\t        local_13c = 0xf;\n 670\t        local_140 = 0;\n 671\t        local_150 = (void *)((uint)local_150 & 0xffffff00);\n 672\t        local_8 = 0xffffffff;\n 673\t        if (0xf < local_158) {\n 674\t                    /* WARNING: Subroutine does not return */\n 675\t          pcStack_1c0 = &UNK_00892473;\n 676\t          operator_delete(local_16c[0]);\n 677\t        }\n 678\t        local_158 = 0xf;\n 679\t        local_15c = 0;\n 680\t        local_16c[0] = (void *)((uint)local_16c[0] & 0xffffff00);\n 681\t      }\n 682\t    }\n 683\t    local_19c._4_4_ = (char *)((int)local_19c._4_4_ + 4);\n 684\t    local_18c = local_18c + 1;\n 685\t    if (6 < local_18c) {\n 686\t      ExceptionList = local_10;\n 687\t      __security_check_cookie(local_14 ^ (uint)&stack0xfffffffc);\n 688\t      return;\n 689\t    }\n 690\t  } while( true );\n 691\t}\n","totalCalleeCount":36,"parameters":[],"endAddress":"0x008924c3"}
