sots-re/verify/results/research-callback/on-tech-researched-rendered.txt

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