953 lines
34 KiB
Text
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
|