1 line
35 KiB
Text
1 line
35 KiB
Text
{"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"}
|