Mercurial > mm7
annotate Items.cpp @ 201:30aa44013f7a
On Items
author | Nomad |
---|---|
date | Sun, 17 Feb 2013 00:16:48 +0200 |
parents | 821fd955c379 |
children | 1bd823f52e3a |
rev | line source |
---|---|
0 | 1 #include <stdlib.h> |
2 | |
3 #include "Items.h" | |
4 #include "MapInfo.h" | |
5 #include "FrameTableInc.h" | |
6 #include "Allocator.h" | |
7 #include "LOD.h" | |
8 #include "Monsters.h" | |
9 #include "Party.h" | |
10 #include "FactionTable.h" | |
11 #include "StorylineTextTable.h" | |
189 | 12 #include "texts.h" |
0 | 13 #include "mm7_data.h" |
14 | |
15 | |
16 | |
17 | |
18 | |
19 ItemGen *ptr_50C9A4; | |
20 | |
21 struct ItemsTable *pItemsTable; | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 //----- (00439DF3) -------------------------------------------------------- | |
28 int ItemGen::_439DF3_get_additional_damage(int *a2, int *a3) | |
29 { | |
30 int *v3; // edi@1 | |
31 ItemGen *v4; // ebx@1 | |
32 signed int v5; // esi@1 | |
33 unsigned int v7; // ecx@5 | |
34 signed int v8; // ebx@7 | |
35 int v9; // edx@22 | |
36 int v10; // eax@24 | |
37 int v11; // edx@25 | |
38 int v12; // ebx@28 | |
39 int v13; // ebx@29 | |
40 int v14; // ebx@30 | |
41 int v15; // ebx@31 | |
42 int v16; // ebx@32 | |
43 signed int v17; // [sp-4h] [bp-10h]@24 | |
44 | |
45 auto a1 = this; | |
46 v3 = a2; | |
47 v4 = a1; | |
48 v5 = 0; | |
49 *a2 = 0; | |
50 if ( !a1->uItemID ) | |
51 return 0; | |
52 UpdateTempBonus(pParty->uTimePlayed); | |
53 if ( v4->uItemID == 501 ) | |
54 { | |
55 LABEL_45: | |
56 *v3 = 1; | |
57 v10 = rand(); | |
58 v17 = 10; | |
59 return v10 % v17 + 6; | |
60 } | |
61 if ( v4->uItemID == 507 ) | |
62 { | |
63 *v3 = 0; | |
64 v11 = rand() % 16; | |
65 return v11 + 3; | |
66 } | |
67 v7 = 3; | |
68 if ( v4->uItemID == 510 ) | |
69 { | |
70 *v3 = 2; | |
71 v9 = rand() % 4; | |
72 return v9 + 9; | |
73 } | |
74 if ( v4->uItemID == 517 ) | |
75 goto LABEL_36; | |
76 v8 = v4->uAdditionalValue; | |
77 if ( v8 > 46 ) | |
78 { | |
79 LABEL_42: | |
80 v5 = 0; | |
81 goto LABEL_37; | |
82 } | |
83 if ( v8 == 46 ) | |
84 { | |
85 *v3 = 0; | |
86 return rand() % 11 + 10; | |
87 } | |
88 if ( v8 > 11 ) | |
89 { | |
90 v12 = v8 - 12; | |
91 if ( !v12 ) | |
92 { | |
93 *v3 = 0; | |
94 return GetDiceResult(v7, 6u); | |
95 } | |
96 v13 = v12 - 1; | |
97 if ( !v13 ) | |
98 { | |
99 *v3 = 8; | |
100 return 5; | |
101 } | |
102 v14 = v13 - 1; | |
103 if ( v14 ) | |
104 { | |
105 v15 = v14 - 1; | |
106 if ( v15 ) | |
107 { | |
108 v16 = v15 - 1; | |
109 if ( !v16 || v16 == 25 ) | |
110 { | |
111 *v3 = 10; | |
112 *a3 = 1; | |
113 return v5; | |
114 } | |
115 goto LABEL_42; | |
116 } | |
117 *v3 = 2; | |
118 return 12; | |
119 } | |
120 LABEL_36: | |
121 v5 = 8; | |
122 LABEL_37: | |
123 *v3 = v5; | |
124 return v5; | |
125 } | |
126 if ( v8 == 11 ) | |
127 { | |
128 *v3 = 0; | |
129 v7 = 2; | |
130 return GetDiceResult(v7, 6u); | |
131 } | |
132 if ( v8 == 4 ) | |
133 { | |
134 *v3 = 2; | |
135 v11 = rand() % 2; | |
136 return v11 + 3; | |
137 } | |
138 if ( v8 == 5 ) | |
139 { | |
140 *v3 = 2; | |
141 v10 = rand(); | |
142 v17 = 3; | |
143 return v10 % v17 + 6; | |
144 } | |
145 if ( v8 == 6 ) | |
146 { | |
147 *v3 = 2; | |
148 v9 = rand() % 4; | |
149 return v9 + 9; | |
150 } | |
151 if ( v8 == 7 ) | |
152 { | |
153 *v3 = 1; | |
154 return rand() % 4 + 2; | |
155 } | |
156 if ( v8 == 8 ) | |
157 { | |
158 *v3 = 1; | |
159 return rand() % 7 + 4; | |
160 } | |
161 if ( v8 == 9 ) | |
162 goto LABEL_45; | |
163 if ( v8 != 10 ) | |
164 goto LABEL_42; | |
165 *v3 = 0; | |
166 v7 = 1; | |
167 return GetDiceResult(v7, 6u); | |
168 } | |
169 | |
170 | |
171 //----- (00402F07) -------------------------------------------------------- | |
172 void ItemGen::Reset() | |
173 { | |
174 this->field_1A = 0; | |
175 this->uAttributes = 0; | |
176 this->uNumCharges = 0; | |
177 this->uAdditionalValue = 0; | |
178 this->_bonus_strength = 0; | |
179 this->_bonus_type = 0; | |
180 this->uItemID = 0; | |
181 this->uBodyAnchor = 0; | |
182 this->uExpireTime = 0i64; | |
183 } | |
184 | |
185 //----- (00458260) -------------------------------------------------------- | |
186 void ItemGen::UpdateTempBonus(__int64 uTimePlayed) | |
187 { | |
188 unsigned int v2; // eax@1 | |
189 | |
190 v2 = this->uAttributes; | |
191 if ( v2 & ITEM_TEMP_BONUS ) | |
192 { | |
193 if ( uTimePlayed > (signed __int64)this->uExpireTime ) | |
194 { | |
195 this->_bonus_type = 0; | |
196 LOBYTE(v2) = v2 & 0xF7; | |
197 this->uAdditionalValue = 0; | |
198 this->uAttributes = v2; | |
199 } | |
200 } | |
201 } | |
202 | |
203 //----- (0045814E) -------------------------------------------------------- | |
204 char *ItemsTable::Release() | |
205 { | |
206 ItemsTable *v1; // edi@1 | |
207 char *result; // eax@23 | |
208 | |
209 v1 = this; | |
210 if ( pMonstersTXT_Raw ) | |
211 pAllocator->FreeChunk(pMonstersTXT_Raw); | |
212 if ( pMonsterPlacementTXT_Raw ) | |
213 pAllocator->FreeChunk(pMonsterPlacementTXT_Raw); | |
214 if ( pSkillDescTXT_Raw ) | |
215 pAllocator->FreeChunk(pSkillDescTXT_Raw); | |
216 if ( v1->pSpcItemsTXT_Raw ) | |
217 pAllocator->FreeChunk(v1->pSpcItemsTXT_Raw); | |
218 if ( v1->pStdItemsTXT_Raw ) | |
219 pAllocator->FreeChunk(v1->pStdItemsTXT_Raw); | |
220 if ( v1->pRndItemsTXT_Raw ) | |
221 pAllocator->FreeChunk(v1->pRndItemsTXT_Raw); | |
222 if ( v1->pItemsTXT_Raw ) | |
223 pAllocator->FreeChunk(v1->pItemsTXT_Raw); | |
224 if ( pHostileTXT_Raw ) | |
225 pAllocator->FreeChunk(pHostileTXT_Raw); | |
226 if ( pHistoryTXT_Raw ) | |
227 pAllocator->FreeChunk(pHistoryTXT_Raw); | |
228 if ( pPotionsTXT_Raw ) | |
229 pAllocator->FreeChunk(pPotionsTXT_Raw); | |
230 if ( pPotionNotesTXT_Raw ) | |
231 pAllocator->FreeChunk(pPotionNotesTXT_Raw); | |
232 v1->pSpcItemsTXT_Raw = 0; | |
233 pSkillDescTXT_Raw = 0; | |
234 v1->pStdItemsTXT_Raw = 0; | |
235 v1->pRndItemsTXT_Raw = pSkillDescTXT_Raw; | |
236 result = pSkillDescTXT_Raw; | |
237 v1->pItemsTXT_Raw = pSkillDescTXT_Raw; | |
238 return result; | |
239 } | |
240 | |
241 | |
242 //----- (00456D84) -------------------------------------------------------- | |
243 void ItemsTable::Initialize() | |
244 { | |
245 //ItemsTable *v1; // edi@1 | |
246 char *v2; // eax@1 | |
247 char *v3; // eax@2 | |
248 char v4; // cl@3 | |
249 int v5; // esi@3 | |
250 char *v6; // esi@21 | |
251 char *v7; // eax@21 | |
252 char *v8; // ecx@22 | |
253 char *v9; // eax@26 | |
254 char v10; // dl@27 | |
255 int v11; // ecx@27 | |
256 int v12; // esi@31 | |
257 char *v13; // eax@39 | |
258 int v14; // esi@40 | |
259 char v15; // cl@41 | |
260 int v16; // eax@41 | |
261 char v17; // zf@53 | |
262 int v18; // eax@57 | |
263 int *v19; // esi@66 | |
264 char *v20; // edx@66 | |
265 int v21; // eax@66 | |
266 char *v22; // ecx@68 | |
267 char *v23; // eax@71 | |
268 int v24; // esi@71 | |
269 char *v25; // ebx@72 | |
270 char v26; // cl@73 | |
271 int v27; // eax@73 | |
272 char *v28; // ST3C_4@160 | |
273 char *v29; // ST3C_4@163 | |
274 char *v30; // eax@175 | |
275 char *v31; // eax@188 | |
276 char v32; // al@190 | |
277 char *v33; // eax@199 | |
278 const char *v34; // ebx@199 | |
279 int v35; // esi@199 | |
280 char *v36; // eax@200 | |
281 char v37; // dl@201 | |
282 int v38; // ecx@201 | |
283 char *v39; // esi@229 | |
284 char *v40; // eax@229 | |
285 char *v41; // ecx@230 | |
286 char *v42; // esi@233 | |
287 char *v43; // eax@234 | |
288 char v44; // dl@235 | |
289 int v45; // ecx@235 | |
290 signed int v46; // edi@287 | |
291 char *v47; // ecx@288 | |
292 char v48; // dl@289 | |
293 int v49; // eax@289 | |
294 int v50; // esi@293 | |
295 signed int v51; // edi@312 | |
296 char *v52; // ecx@312 | |
297 char v53; // dl@313 | |
298 int v54; // eax@313 | |
299 int v55; // esi@317 | |
300 signed int v56; // edi@348 | |
301 char *v57; // eax@348 | |
302 char v58; // dl@349 | |
303 int v59; // ecx@349 | |
304 int v60; // esi@353 | |
305 char *Str; // [sp+Ch] [bp-18h]@1 | |
306 signed int Stra; // [sp+Ch] [bp-18h]@22 | |
307 signed int Strb; // [sp+Ch] [bp-18h]@25 | |
308 signed int Strc; // [sp+Ch] [bp-18h]@39 | |
309 signed int Strd; // [sp+Ch] [bp-18h]@66 | |
310 signed int Stre; // [sp+Ch] [bp-18h]@156 | |
311 const char **Strf; // [sp+Ch] [bp-18h]@176 | |
312 const char **Strg; // [sp+Ch] [bp-18h]@182 | |
313 signed int Strh; // [sp+Ch] [bp-18h]@230 | |
314 signed int Stri; // [sp+Ch] [bp-18h]@311 | |
315 char **Strj; // [sp+Ch] [bp-18h]@347 | |
316 int v72; // [sp+10h] [bp-14h]@7 | |
317 signed int v73; // [sp+10h] [bp-14h]@21 | |
318 int v74; // [sp+10h] [bp-14h]@45 | |
319 int v75; // [sp+10h] [bp-14h]@77 | |
320 int v76; // [sp+10h] [bp-14h]@205 | |
321 signed int v77; // [sp+10h] [bp-14h]@229 | |
322 int v78; // [sp+10h] [bp-14h]@239 | |
323 signed int v79; // [sp+14h] [bp-10h]@1 | |
324 char *v80; // [sp+14h] [bp-10h]@39 | |
325 char *v81; // [sp+14h] [bp-10h]@175 | |
326 char *v82; // [sp+14h] [bp-10h]@188 | |
327 int v83; // [sp+18h] [bp-Ch]@67 | |
328 size_t v84; // [sp+18h] [bp-Ch]@156 | |
329 signed int v85; // [sp+18h] [bp-Ch]@176 | |
330 signed int v86; // [sp+18h] [bp-Ch]@182 | |
331 signed int v87; // [sp+18h] [bp-Ch]@233 | |
332 signed int v88; // [sp+1Ch] [bp-8h]@2 | |
333 signed int v89; // [sp+1Ch] [bp-8h]@26 | |
334 signed int v90; // [sp+1Ch] [bp-8h]@40 | |
335 signed int v91; // [sp+1Ch] [bp-8h]@72 | |
336 signed int v92; // [sp+1Ch] [bp-8h]@200 | |
337 signed int v93; // [sp+1Ch] [bp-8h]@234 | |
338 signed int v94; // [sp+1Ch] [bp-8h]@288 | |
339 signed int v95; // [sp+1Ch] [bp-8h]@312 | |
340 signed int v96; // [sp+1Ch] [bp-8h]@348 | |
341 signed int v97; // [sp+20h] [bp-4h]@2 | |
342 signed int v98; // [sp+20h] [bp-4h]@26 | |
343 signed int v99; // [sp+20h] [bp-4h]@40 | |
344 signed int v100; // [sp+20h] [bp-4h]@72 | |
345 signed int v101; // [sp+20h] [bp-4h]@200 | |
346 signed int v102; // [sp+20h] [bp-4h]@234 | |
347 signed int v103; // [sp+20h] [bp-4h]@288 | |
348 | |
349 //v1 = this; | |
350 | |
351 pMapStats = new MapStats; | |
352 pMapStats->Initialize(); | |
353 | |
354 pMonsterStats = new MonsterStats; | |
355 pMonsterStats->Initialize(); | |
356 pMonsterStats->InitializePlacements(); | |
357 | |
358 pSpellStats = new SpellStats; | |
359 pSpellStats->Initialize(); | |
360 | |
361 LoadPotions(); | |
362 LoadPotionNotes(); | |
363 | |
364 pFactionTable = new FactionTable; | |
365 pFactionTable->Initialize(); | |
366 | |
367 pStorylineText = new StorylineText; | |
368 pStorylineText->Initialize(); | |
369 | |
370 pStdItemsTXT_Raw = 0; | |
371 v2 = (char *)pEvents_LOD->LoadRaw("stditems.txt", 0); | |
372 pStdItemsTXT_Raw = v2; | |
373 strtok(v2, "\r"); | |
374 strtok(0, "\r"); | |
375 strtok(0, "\r"); | |
376 strtok(0, "\r"); | |
377 Str = (char *)&pEnchantments[0].pParam; | |
378 v79 = 24; | |
379 do | |
380 { | |
381 v3 = strtok(0, "\r") + 1; | |
382 v97 = 0; | |
383 v88 = 0; | |
384 do | |
385 { | |
386 v4 = *v3; | |
387 v5 = 0; | |
388 while ( v4 != 9 && v4 ) | |
389 { | |
390 ++v5; | |
391 v4 = v3[v5]; | |
392 } | |
393 v72 = (int)&v3[v5]; | |
394 if ( !v3[v5] ) | |
395 v88 = 1; | |
396 v3[v5] = 0; | |
397 if ( v5 ) | |
398 { | |
399 if ( v97 ) | |
400 { | |
401 if ( v97 == 1 ) | |
402 { | |
403 *(unsigned int *)Str = (int)RemoveQuotes(v3); | |
404 } | |
405 else | |
406 { | |
407 if ( v97 > 1 ) | |
408 Str[v97 + 6] = atoi(v3); | |
409 } | |
410 } | |
411 else | |
412 { | |
413 *((char **)Str + 1) = RemoveQuotes(v3); | |
414 } | |
415 } | |
416 else | |
417 { | |
418 if ( !v97 ) | |
419 v88 = 1; | |
420 } | |
421 ++v97; | |
422 v3 = (char *)(v72 + 1); | |
423 } | |
424 while ( v97 <= 10 && !v88 ); | |
425 Str += 20; | |
426 --v79; | |
427 } | |
428 while ( v79 ); | |
429 v6 = (char *)&field_116D8[3]; | |
430 memset(&field_116D8[3], 0, 0x24u); | |
431 v7 = &pEnchantments[0].field_8[4]; | |
432 v73 = 9; | |
433 do | |
434 { | |
435 v8 = v7; | |
436 Stra = 24; | |
437 do | |
438 { | |
439 *(unsigned int *)v6 += (unsigned __int8)*v8; | |
440 v8 += 20; | |
441 --Stra; | |
442 } | |
443 while ( Stra ); | |
444 v6 += 4; | |
445 ++v7; | |
446 --v73; | |
447 } | |
448 while ( v73 ); | |
449 strtok(0, "\r"); | |
450 strtok(0, "\r"); | |
451 strtok(0, "\r"); | |
452 strtok(0, "\r"); | |
453 strtok(0, "\r"); | |
454 Strb = 17856; | |
455 do | |
456 { | |
457 v9 = strtok(0, "\r") + 1; | |
458 v98 = 0; | |
459 v89 = 0; | |
460 do | |
461 { | |
462 v10 = *v9; | |
463 v11 = 0; | |
464 while ( v10 != 9 && v10 ) | |
465 { | |
466 ++v11; | |
467 v10 = v9[v11]; | |
468 } | |
469 v12 = (int)&v9[v11]; | |
470 if ( !v9[v11] ) | |
471 v89 = 1; | |
472 *(unsigned char *)v12 = 0; | |
473 if ( v11 && v98 > 1 ) | |
474 *(&pItems[0].uItemID + v98 + Strb) = atoi(v9); | |
475 ++v98; | |
476 v9 = (char *)(v12 + 1); | |
477 } | |
478 while ( v98 < 4 && !v89 ); | |
479 Strb += 2; | |
480 } | |
481 while ( Strb < 17868 ); | |
482 pSpcItemsTXT_Raw = 0; | |
483 v13 = (char *)pEvents_LOD->LoadRaw("spcitems.txt", 0); | |
484 pSpcItemsTXT_Raw = v13; | |
485 strtok(v13, "\r"); | |
486 strtok(0, "\r"); | |
487 strtok(0, "\r"); | |
488 strtok(0, "\r"); | |
489 v80 = (char *)&pSpecialEnchantments[0].pParam; | |
490 Strc = 72; | |
491 do | |
492 { | |
493 v99 = 0; | |
494 v14 = (int)(strtok(0, "\r") + 1); | |
495 v90 = 0; | |
496 do | |
497 { | |
498 v15 = *(unsigned char *)v14; | |
499 v16 = 0; | |
500 while ( v15 != 9 && v15 ) | |
501 { | |
502 ++v16; | |
503 v15 = *(unsigned char *)(v16 + v14); | |
504 } | |
505 v74 = v16 + v14; | |
506 if ( !*(unsigned char *)(v16 + v14) ) | |
507 v90 = 1; | |
508 *(unsigned char *)(v16 + v14) = 0; | |
509 if ( v16 ) | |
510 { | |
511 if ( v99 ) | |
512 { | |
513 if ( v99 == 1 ) | |
514 { | |
515 *(char **)v80 = RemoveQuotes((char *)v14); | |
516 } | |
517 else | |
518 { | |
519 if ( v99 <= 1 ) | |
520 { | |
521 v17 = v99 == 14; | |
522 } | |
523 else | |
524 { | |
525 v17 = v99 == 14; | |
526 if ( v99 < 14 ) | |
527 { | |
528 v80[v99 + 6] = atoi((const char *)v14); | |
529 goto LABEL_63; | |
530 } | |
531 } | |
532 if ( v17 ) | |
533 { | |
534 v18 = atoi((const char *)v14); | |
535 *((unsigned int *)v80 + 5) = v18; | |
536 if ( !v18 ) | |
537 *((unsigned int *)v80 + 5) = atoi((const char *)(v14 + 1)); | |
538 } | |
539 else | |
540 { | |
541 if ( v99 == 15 ) | |
542 v80[24] = tolower(*(unsigned char *)v14) - 97; | |
543 } | |
544 } | |
545 } | |
546 else | |
547 { | |
548 *((char **)v80 + 1) = RemoveQuotes((char *)v14); | |
549 } | |
550 } | |
551 else | |
552 { | |
553 if ( !v99 ) | |
554 v90 = 1; | |
555 } | |
556 LABEL_63: | |
557 ++v99; | |
558 v14 = v74 + 1; | |
559 } | |
560 while ( v99 <= 15 && !v90 ); | |
561 v80 += 28; | |
562 --Strc; | |
563 } | |
564 while ( Strc ); | |
565 v19 = field_11738; | |
566 memset(field_11738, 0, 0x60u); | |
567 v20 = &pSpecialEnchantments[0].field_8[4]; | |
568 Strd = 12; | |
569 v21 = 71; | |
570 field_11798 = 71; | |
571 do | |
572 { | |
573 v83 = 0; | |
574 if ( v21 > 0 ) | |
575 { | |
576 v22 = v20; | |
577 do | |
578 { | |
579 *v19 += (unsigned __int8)*v22; | |
580 ++v83; | |
581 v21 = field_11798; | |
582 v22 += 28; | |
583 } | |
584 while ( v83 < v21 ); | |
585 } | |
586 ++v19; | |
587 ++v20; | |
588 --Strd; | |
589 } | |
590 while ( Strd ); | |
591 Initialize2DA(); | |
592 pItemsTXT_Raw = 0; | |
593 v23 = (char *)pEvents_LOD->LoadRaw("items.txt", 0); | |
594 pItemsTXT_Raw = v23; | |
595 strtok(v23, "\r"); | |
596 v24 = 0; | |
597 strtok(0, "\r"); | |
598 pItems[0].uItemID = 0; | |
599 while ( 2 ) | |
600 { | |
601 v100 = 0; | |
602 v25 = strtok(0, "\r") + 1; | |
603 v91 = 0; | |
604 while ( 2 ) | |
605 { | |
606 v26 = *v25; | |
607 v27 = 0; | |
608 while ( v26 != 9 && v26 ) | |
609 { | |
610 ++v27; | |
611 v26 = v25[v27]; | |
612 } | |
613 v75 = (int)&v25[v27]; | |
614 if ( !v25[v27] ) | |
615 v91 = 1; | |
616 v25[v27] = 0; | |
617 if ( v27 ) | |
618 { | |
619 switch ( v100 ) | |
620 { | |
621 case 0: | |
622 v24 = atoi(v25); | |
623 break; | |
624 case 1: | |
625 pItems[v24].pIconName = (char *)RemoveQuotes(v25); | |
626 break; | |
627 case 2: | |
628 pItems[v24].pName = (char *)RemoveQuotes(v25); | |
629 break; | |
630 case 3: | |
631 pItems[v24].uValue = atoi(v25); | |
632 break; | |
633 case 4: | |
634 if ( !_strcmpi(v25, "weapon") ) | |
635 goto LABEL_89; | |
636 if ( _strcmpi(v25, "weapon2") ) | |
637 { | |
638 if ( _strcmpi(v25, "weapon1or2") ) | |
639 { | |
640 if ( _strcmpi(v25, "missile") && _strcmpi(v25, "bow") ) | |
641 { | |
642 if ( _strcmpi(v25, "armor") ) | |
643 { | |
644 if ( _strcmpi(v25, "shield") ) | |
645 { | |
646 if ( _strcmpi(v25, "helm") ) | |
647 { | |
648 if ( _strcmpi(v25, "belt") ) | |
649 { | |
650 if ( _strcmpi(v25, "cloak") ) | |
651 { | |
652 if ( _strcmpi(v25, "gauntlets") ) | |
653 { | |
654 if ( _strcmpi(v25, "boots") ) | |
655 { | |
656 if ( _strcmpi(v25, "ring") ) | |
657 { | |
658 if ( _strcmpi(v25, "amulet") ) | |
659 { | |
660 if ( _strcmpi(v25, "weaponw") ) | |
661 { | |
662 if ( _strcmpi(v25, "herb") && _strcmpi(v25, "reagent") ) | |
663 { | |
664 if ( _strcmpi(v25, "bottle") ) | |
665 { | |
666 if ( _strcmpi(v25, "sscroll") ) | |
667 { | |
668 if ( _strcmpi(v25, "book") ) | |
669 { | |
670 if ( _strcmpi(v25, "mscroll") ) | |
671 { | |
672 if ( _strcmpi(v25, "gold") ) | |
673 { | |
674 if ( _strcmpi(v25, "gem") ) | |
675 pItems[v24].uEquipType = 20; | |
676 else | |
677 pItems[v24].uEquipType = 19; | |
678 } | |
679 else | |
680 { | |
681 pItems[v24].uEquipType = 18; | |
682 } | |
683 } | |
684 else | |
685 { | |
686 pItems[v24].uEquipType = 17; | |
687 } | |
688 } | |
689 else | |
690 { | |
691 pItems[v24].uEquipType = 16; | |
692 } | |
693 } | |
694 else | |
695 { | |
696 pItems[v24].uEquipType = 15; | |
697 } | |
698 } | |
699 else | |
700 { | |
701 pItems[v24].uEquipType = 14; | |
702 } | |
703 } | |
704 else | |
705 { | |
706 pItems[v24].uEquipType = 13; | |
707 } | |
708 } | |
709 else | |
710 { | |
711 pItems[v24].uEquipType = 12; | |
712 } | |
713 } | |
714 else | |
715 { | |
716 pItems[v24].uEquipType = 11; | |
717 } | |
718 } | |
719 else | |
720 { | |
721 pItems[v24].uEquipType = 10; | |
722 } | |
723 } | |
724 else | |
725 { | |
726 pItems[v24].uEquipType = 9; | |
727 } | |
728 } | |
729 else | |
730 { | |
731 pItems[v24].uEquipType = 8; | |
732 } | |
733 } | |
734 else | |
735 { | |
736 pItems[v24].uEquipType = 7; | |
737 } | |
738 } | |
739 else | |
740 { | |
741 pItems[v24].uEquipType = 6; | |
742 } | |
743 } | |
744 else | |
745 { | |
746 pItems[v24].uEquipType = 5; | |
747 } | |
748 } | |
749 else | |
750 { | |
751 pItems[v24].uEquipType = 4; | |
752 } | |
753 } | |
754 else | |
755 { | |
756 pItems[v24].uEquipType = 3; | |
757 } | |
758 } | |
759 else | |
760 { | |
761 pItems[v24].uEquipType = 2; | |
762 } | |
763 } | |
764 else | |
765 { | |
766 LABEL_89: | |
767 pItems[v24].uEquipType = 0; | |
768 } | |
769 } | |
770 else | |
771 { | |
772 pItems[v24].uEquipType = 1; | |
773 } | |
774 break; | |
775 case 5: | |
776 if ( _strcmpi(v25, "staff") ) | |
777 { | |
778 if ( _strcmpi(v25, "sword") ) | |
779 { | |
780 if ( _strcmpi(v25, "dagger") ) | |
781 { | |
782 if ( _strcmpi(v25, "axe") ) | |
783 { | |
784 if ( _strcmpi(v25, "spear") ) | |
785 { | |
786 if ( _strcmpi(v25, "bow") ) | |
787 { | |
788 if ( _strcmpi(v25, "mace") ) | |
789 { | |
790 if ( _strcmpi(v25, "blaster") ) | |
791 { | |
792 if ( _strcmpi(v25, "shield") ) | |
793 { | |
794 if ( _strcmpi(v25, "leather") ) | |
795 { | |
796 if ( _strcmpi(v25, "chain") ) | |
797 { | |
798 if ( _strcmpi(v25, "plate") ) | |
799 { | |
800 if ( _strcmpi(v25, "club") ) | |
801 pItems[v24].uSkillType = 38; | |
802 else | |
803 pItems[v24].uSkillType = 37; | |
804 } | |
805 else | |
806 { | |
807 pItems[v24].uSkillType = 11; | |
808 } | |
809 } | |
810 else | |
811 { | |
812 pItems[v24].uSkillType = 10; | |
813 } | |
814 } | |
815 else | |
816 { | |
817 pItems[v24].uSkillType = 9; | |
818 } | |
819 } | |
820 else | |
821 { | |
822 pItems[v24].uSkillType = 8; | |
823 } | |
824 } | |
825 else | |
826 { | |
827 pItems[v24].uSkillType = 7; | |
828 } | |
829 } | |
830 else | |
831 { | |
832 pItems[v24].uSkillType = 6; | |
833 } | |
834 } | |
835 else | |
836 { | |
837 pItems[v24].uSkillType = 5; | |
838 } | |
839 } | |
840 else | |
841 { | |
842 pItems[v24].uSkillType = 4; | |
843 } | |
844 } | |
845 else | |
846 { | |
847 pItems[v24].uSkillType = 3; | |
848 } | |
849 } | |
850 else | |
851 { | |
852 pItems[v24].uSkillType = 2; | |
853 } | |
854 } | |
855 else | |
856 { | |
857 pItems[v24].uSkillType = 1; | |
858 } | |
859 } | |
860 else | |
861 { | |
862 pItems[v24].uSkillType = 0; | |
863 } | |
864 break; | |
865 case 6: | |
866 Stre = 0; | |
867 v84 = strlen(v25); | |
868 if ( (signed int)v84 > 0 ) | |
869 { | |
870 while ( tolower((unsigned __int8)v25[Stre]) != 'd' ) | |
871 { | |
872 ++Stre; | |
873 if ( Stre >= (signed int)v84 ) | |
874 goto LABEL_161; | |
875 } | |
876 v25[Stre] = 0; | |
877 v28 = (char *)&pItems[v24]; | |
878 v28[34] = atoi(v25); | |
879 v28[35] = atoi(&v25[Stre + 1]); | |
880 v25[Stre] = 'd'; | |
881 } | |
882 LABEL_161: | |
883 if ( Stre == v84 && tolower((unsigned __int8)*v25) != 115 ) | |
884 { | |
885 v29 = (char *)&pItems[v24]; | |
886 v29[34] = atoi(v25); | |
887 v29[35] = 1; | |
888 } | |
889 break; | |
890 case 7: | |
891 pItems[v24].uDamageMod = atoi(v25); | |
892 break; | |
893 case 8: | |
894 if ( _strcmpi(v25, "artifact") ) | |
895 { | |
896 if ( _strcmpi(v25, "relic") ) | |
897 { | |
898 if ( _strcmpi(v25, "special") ) | |
899 pItems[v24].uMaterial = 0; | |
900 else | |
901 pItems[v24].uMaterial = 3; | |
902 } | |
903 else | |
904 { | |
905 pItems[v24].uMaterial = 2; | |
906 } | |
907 } | |
908 else | |
909 { | |
910 pItems[v24].uMaterial = 1; | |
911 } | |
912 break; | |
913 case 9: | |
914 BYTE2(pItems[v24 + 1].uItemID) = atoi(v25); | |
915 break; | |
916 case 10: | |
917 pItems[v24].pUnidentifiedName = (char *)RemoveQuotes(v25); | |
918 break; | |
919 case 11: | |
920 pItems[v24].uSpriteID = atoi(v25); | |
921 break; | |
922 case 12: | |
923 v30 = (char *)&pItems[v24]; | |
924 v81 = v30; | |
925 if ( v30[37] == 3 ) | |
926 { | |
927 v85 = 0; | |
928 Strf = (const char **)&pEnchantments[0].pParam; | |
929 while ( _strcmpi(*Strf, v25) ) | |
930 { | |
931 ++v85; | |
932 Strf += 5; | |
933 if ( v85 >= 24 ) | |
934 goto LABEL_181; | |
935 } | |
936 v81[39] = v85 + 1; | |
937 LABEL_181: | |
938 if ( !v81[39] ) | |
939 { | |
940 v86 = 0; | |
941 Strg = (const char **)&pSpecialEnchantments[0].pParam; | |
942 while ( _strcmpi(*Strg, v25) ) | |
943 { | |
944 ++v86; | |
945 Strg += 7; | |
946 if ( v86 >= 72 ) | |
947 goto LABEL_196; | |
948 } | |
949 v81[38] = v86 + 1; | |
950 } | |
951 } | |
952 else | |
953 { | |
954 v30[38] = 0; | |
955 v30[39] = 0; | |
956 } | |
957 break; | |
958 case 13: | |
959 v31 = (char *)&pItems[v24]; | |
960 v82 = v31; | |
961 if ( v31[37] == 3 && v31[39] ) | |
962 { | |
963 v32 = atoi(v25); | |
964 v82[40] = v32; | |
965 if ( !v32 ) | |
966 v82[40] = 1; | |
967 } | |
968 else | |
969 { | |
970 v31[40] = 0; | |
971 } | |
972 break; | |
973 case 14: | |
974 pItems[v24].uEquipX = atoi(v25); | |
975 break; | |
976 case 15: | |
977 pItems[v24].uEquipY = atoi(v25); | |
978 break; | |
979 case 16: | |
980 pItems[v24].pDescription = (char *)RemoveQuotes(v25); | |
981 break; | |
982 default: | |
983 break; | |
984 } | |
985 } | |
986 LABEL_196: | |
987 ++v100; | |
988 v25 = (char *)(v75 + 1); | |
989 if ( v100 <= 16 && !v91 ) | |
990 continue; | |
991 break; | |
992 } | |
993 ++v24; | |
994 if ( v24 < 800 ) | |
995 continue; | |
996 break; | |
997 } | |
998 pRndItemsTXT_Raw = 0; | |
999 pItems[0].uItemID = v24; | |
1000 v33 = (char *)pEvents_LOD->LoadRaw("rnditems.txt", 0); | |
1001 v34 = "\r"; | |
1002 pRndItemsTXT_Raw = v33; | |
1003 strtok(v33, "\r"); | |
1004 v35 = 0; | |
1005 strtok(0, "\r"); | |
1006 strtok(0, "\r"); | |
1007 strtok(0, "\r"); | |
1008 do | |
1009 { | |
1010 v101 = 0; | |
1011 v36 = strtok(0, "\r") + 1; | |
1012 v92 = 0; | |
1013 do | |
1014 { | |
1015 v37 = *v36; | |
1016 v38 = 0; | |
1017 while ( v37 != 9 && v37 ) | |
1018 { | |
1019 ++v38; | |
1020 v37 = v36[v38]; | |
1021 } | |
1022 v76 = (int)&v36[v38]; | |
1023 if ( !v36[v38] ) | |
1024 v92 = 1; | |
1025 *(unsigned char *)v76 = 0; | |
1026 if ( v38 ) | |
1027 { | |
1028 if ( v101 ) | |
1029 { | |
1030 switch ( v101 ) | |
1031 { | |
201 | 1032 case 2: pItems[v35].field_2C[0] = atoi(v36); break; |
1033 case 3: pItems[v35].field_2C[1] = atoi(v36); break; | |
1034 case 4: pItems[v35].field_2C[2] = atoi(v36); break; | |
1035 case 5: pItems[v35].field_2C[3] = atoi(v36); break; | |
0 | 1036 case 6: |
1037 *((unsigned char *)&pItems[0].uItemID + 16 * (3 * v35 + 3)) = atoi(v36); | |
1038 break; | |
1039 case 7: | |
1040 BYTE1(pItems[v35 + 1].uItemID) = atoi(v36); | |
1041 break; | |
1042 } | |
1043 } | |
1044 else | |
1045 { | |
1046 v35 = atoi(v36); | |
1047 } | |
1048 } | |
1049 else | |
1050 { | |
1051 if ( !v101 ) | |
1052 v92 = 1; | |
1053 } | |
1054 ++v101; | |
1055 v36 = (char *)(v76 + 1); | |
1056 } | |
1057 while ( v101 <= 7 && !v92 ); | |
1058 ++v35; | |
1059 } | |
1060 while ( v35 < 619 ); | |
1061 if ( pRndItemsTXT_Raw ) | |
1062 { | |
1063 pAllocator->FreeChunk(pRndItemsTXT_Raw); | |
1064 pRndItemsTXT_Raw = 0; | |
1065 } | |
1066 v39 = (char *)field_11684; | |
1067 memset(field_11684, 0, 0x18u); | |
201 | 1068 v40 = pItems[0].field_2C; |
0 | 1069 v77 = 6; |
1070 do | |
1071 { | |
1072 v41 = v40; | |
1073 Strh = 800; | |
1074 do | |
1075 { | |
1076 *(unsigned int *)v39 += (unsigned __int8)*v41; | |
1077 v41 += 48; | |
1078 --Strh; | |
1079 } | |
1080 while ( Strh ); | |
1081 v39 += 4; | |
1082 ++v40; | |
1083 --v77; | |
1084 } | |
1085 while ( v77 ); | |
1086 v42 = 0; | |
1087 strtok(0, "\r"); | |
1088 strtok(0, "\r"); | |
1089 strtok(0, "\r"); | |
1090 strtok(0, "\r"); | |
1091 strtok(0, "\r"); | |
1092 v87 = 0; | |
1093 do | |
1094 { | |
1095 v43 = strtok(v42, "\r") + 1; | |
1096 v102 = (signed int)v42; | |
1097 v93 = (signed int)v42; | |
1098 do | |
1099 { | |
1100 v44 = *v43; | |
1101 v45 = 0; | |
1102 while ( v44 != 9 && v44 ) | |
1103 { | |
1104 ++v45; | |
1105 v44 = v43[v45]; | |
1106 } | |
1107 v78 = (int)&v43[v45]; | |
1108 if ( !v43[v45] ) | |
1109 v93 = 1; | |
1110 v42 = 0; | |
1111 *(unsigned char *)v78 = 0; | |
1112 if ( v45 ) | |
1113 { | |
1114 switch ( v102 ) | |
1115 { | |
1116 case 2: | |
1117 if ( v87 ) | |
1118 { | |
1119 if ( v87 == 1 ) | |
1120 { | |
1121 *(unsigned int *)&field_1169C[24] = atoi(v43); | |
1122 } | |
1123 else | |
1124 { | |
1125 if ( v87 == 2 ) | |
1126 *(unsigned int *)&field_1169C[48] = atoi(v43); | |
1127 } | |
1128 } | |
1129 else | |
1130 { | |
1131 *(unsigned int *)&field_1169C[0] = atoi(v43); | |
1132 } | |
1133 break; | |
1134 case 3: | |
1135 if ( v87 ) | |
1136 { | |
1137 if ( v87 == 1 ) | |
1138 { | |
1139 *(unsigned int *)&field_1169C[28] = atoi(v43); | |
1140 } | |
1141 else | |
1142 { | |
1143 if ( v87 == 2 ) | |
1144 *(unsigned int *)&field_1169C[52] = atoi(v43); | |
1145 } | |
1146 } | |
1147 else | |
1148 { | |
1149 *(unsigned int *)&field_1169C[4] = atoi(v43); | |
1150 } | |
1151 break; | |
1152 case 4: | |
1153 if ( v87 ) | |
1154 { | |
1155 if ( v87 == 1 ) | |
1156 { | |
1157 *(unsigned int *)&field_1169C[32] = atoi(v43); | |
1158 } | |
1159 else | |
1160 { | |
1161 if ( v87 == 2 ) | |
1162 *(unsigned int *)&field_1169C[56] = atoi(v43); | |
1163 } | |
1164 } | |
1165 else | |
1166 { | |
1167 *(unsigned int *)&field_1169C[8] = atoi(v43); | |
1168 } | |
1169 break; | |
1170 case 5: | |
1171 if ( v87 ) | |
1172 { | |
1173 if ( v87 == 1 ) | |
1174 { | |
1175 *(unsigned int *)&field_1169C[36] = atoi(v43); | |
1176 } | |
1177 else | |
1178 { | |
1179 if ( v87 == 2 ) | |
1180 field_116D8[0] = atoi(v43); | |
1181 } | |
1182 } | |
1183 else | |
1184 { | |
1185 *(unsigned int *)&field_1169C[12] = atoi(v43); | |
1186 } | |
1187 break; | |
1188 case 6: | |
1189 if ( v87 ) | |
1190 { | |
1191 if ( v87 == 1 ) | |
1192 { | |
1193 *(unsigned int *)&field_1169C[40] = atoi(v43); | |
1194 } | |
1195 else | |
1196 { | |
1197 if ( v87 == 2 ) | |
1198 field_116D8[1] = atoi(v43); | |
1199 } | |
1200 } | |
1201 else | |
1202 { | |
1203 *(unsigned int *)&field_1169C[16] = atoi(v43); | |
1204 } | |
1205 break; | |
1206 case 7: | |
1207 if ( v87 ) | |
1208 { | |
1209 if ( v87 == 1 ) | |
1210 { | |
1211 *(unsigned int *)&field_1169C[44] = atoi(v43); | |
1212 } | |
1213 else | |
1214 { | |
1215 if ( v87 == 2 ) | |
1216 field_116D8[2] = atoi(v43); | |
1217 } | |
1218 } | |
1219 else | |
1220 { | |
1221 *(unsigned int *)&field_1169C[20] = atoi(v43); | |
1222 } | |
1223 break; | |
1224 } | |
1225 } | |
1226 ++v102; | |
1227 v43 = (char *)(v78 + 1); | |
1228 } | |
1229 while ( v102 <= 7 && !v93 ); | |
1230 ++v87; | |
1231 } | |
1232 while ( v87 < 3 ); | |
1233 pSkillDescTXT_Raw = 0; | |
1234 pSkillDescTXT_Raw = (char *)pEvents_LOD->LoadRaw("skilldes.txt", 0); | |
1235 strtok(pSkillDescTXT_Raw, "\r"); | |
1236 v46 = 0; | |
1237 do | |
1238 { | |
1239 v103 = 0; | |
1240 v94 = 0; | |
1241 v47 = strtok(0, "\r") + 1; | |
1242 do | |
1243 { | |
1244 v48 = *v47; | |
1245 v49 = 0; | |
1246 while ( v48 != 9 && v48 ) | |
1247 { | |
1248 ++v49; | |
1249 v48 = v47[v49]; | |
1250 } | |
1251 v50 = (int)&v47[v49]; | |
1252 if ( !v47[v49] ) | |
1253 v94 = 1; | |
1254 *(unsigned char *)v50 = 0; | |
1255 if ( v49 ) | |
1256 { | |
1257 switch ( v103 ) | |
1258 { | |
1259 case 1: | |
1260 pSkillDesc[v46] = (char *)RemoveQuotes(v47); | |
1261 break; | |
1262 case 2: | |
1263 pNormalSkillDesc[v46] = (char *)RemoveQuotes(v47); | |
1264 break; | |
1265 case 3: | |
1266 pExpertSkillDesc[v46] = (char *)RemoveQuotes(v47); | |
1267 break; | |
1268 case 4: | |
1269 pMasterSkillDesc[v46] = (char *)RemoveQuotes(v47); | |
1270 break; | |
1271 case 5: | |
1272 pGrandSkillDesc[v46] = (char *)RemoveQuotes(v47); | |
1273 break; | |
1274 } | |
1275 } | |
1276 else | |
1277 { | |
1278 if ( !v103 ) | |
1279 v94 = 1; | |
1280 } | |
1281 ++v103; | |
1282 v47 = (char *)(v50 + 1); | |
1283 } | |
1284 while ( v103 <= 5 && !v94 ); | |
1285 ++v46; | |
1286 } | |
1287 while ( v46 < 37 ); | |
1288 pStatsTXT_Raw = 0; | |
1289 pStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("stats.txt", 0); | |
1290 strtok(pStatsTXT_Raw, "\r"); | |
1291 Stri = 0; | |
1292 do | |
1293 { | |
1294 v51 = 0; | |
1295 v95 = 0; | |
1296 v52 = strtok(0, v34) + 1; | |
1297 do | |
1298 { | |
1299 v53 = *v52; | |
1300 v54 = 0; | |
1301 if ( *v52 != 9 ) | |
1302 { | |
1303 do | |
1304 { | |
1305 if ( !v53 ) | |
1306 break; | |
1307 ++v54; | |
1308 v53 = v52[v54]; | |
1309 } | |
1310 while ( v53 != 9 ); | |
1311 v34 = "\r"; | |
1312 } | |
1313 v55 = (int)&v52[v54]; | |
1314 if ( !v52[v54] ) | |
1315 v95 = 1; | |
1316 *(unsigned char *)v55 = 0; | |
1317 if ( v54 ) | |
1318 { | |
1319 if ( v51 ) | |
1320 { | |
1321 switch ( Stri ) | |
1322 { | |
1323 case 0: | |
1324 case 1: | |
1325 case 2: | |
1326 case 3: | |
1327 case 4: | |
1328 case 5: | |
1329 case 6: | |
1330 pAttributeDescriptions[Stri] = (char *)RemoveQuotes(v52); | |
1331 break; | |
1332 case 7: | |
1333 pHealthPointsAttributeDescription = (char *)RemoveQuotes(v52); | |
1334 break; | |
1335 case 8: | |
1336 pArmourClassAttributeDescription = (char *)RemoveQuotes(v52); | |
1337 break; | |
1338 case 9: | |
1339 pSpellPointsAttributeDescription = (char *)RemoveQuotes(v52); | |
1340 break; | |
1341 case 10: | |
1342 pPlayerConditionAttributeDescription = (char *)RemoveQuotes(v52); | |
1343 break; | |
1344 case 11: | |
1345 pFastSpellAttributeDescription = (char *)RemoveQuotes(v52); | |
1346 break; | |
1347 case 12: | |
1348 pPlayerAgeAttributeDescription = (char *)RemoveQuotes(v52); | |
1349 break; | |
1350 case 13: | |
1351 pPlayerLevelAttributeDescription = (char *)RemoveQuotes(v52); | |
1352 break; | |
1353 case 14: | |
1354 pPlayerExperienceAttributeDescription = (char *)RemoveQuotes(v52); | |
1355 break; | |
1356 case 15: | |
1357 pAttackBonusAttributeDescription = (char *)RemoveQuotes(v52); | |
1358 break; | |
1359 case 16: | |
1360 pAttackDamageAttributeDescription = (char *)RemoveQuotes(v52); | |
1361 break; | |
1362 case 17: | |
1363 pMissleBonusAttributeDescription = (char *)RemoveQuotes(v52); | |
1364 break; | |
1365 case 18: | |
1366 pMissleDamageAttributeDescription = (char *)RemoveQuotes(v52); | |
1367 break; | |
1368 case 19: | |
1369 pFireResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1370 break; | |
1371 case 20: | |
1372 pAirResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1373 break; | |
1374 case 21: | |
1375 pWaterResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1376 break; | |
1377 case 22: | |
1378 pEarthResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1379 break; | |
1380 case 23: | |
1381 pMindResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1382 break; | |
1383 case 24: | |
1384 pBodyResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1385 break; | |
1386 case 25: | |
1387 pSkillPointsAttributeDescription = (char *)RemoveQuotes(v52); | |
1388 break; | |
1389 default: | |
1390 break; | |
1391 } | |
1392 } | |
1393 } | |
1394 else | |
1395 { | |
1396 if ( !v51 ) | |
1397 v95 = 1; | |
1398 } | |
1399 ++v51; | |
1400 v52 = (char *)(v55 + 1); | |
1401 } | |
1402 while ( v51 < 2 && !v95 ); | |
1403 ++Stri; | |
1404 } | |
1405 while ( Stri < 26 ); | |
1406 pClassTXT_Raw = 0; | |
1407 pClassTXT_Raw = (char *)pEvents_LOD->LoadRaw("class.txt", 0); | |
1408 strtok(pClassTXT_Raw, v34); | |
1409 Strj = pClassDescriptions; | |
1410 do | |
1411 { | |
1412 v56 = 0; | |
1413 v57 = strtok(0, v34) + 1; | |
1414 v96 = 0; | |
1415 do | |
1416 { | |
1417 v58 = *v57; | |
1418 v59 = 0; | |
1419 if ( *v57 != 9 ) | |
1420 { | |
1421 do | |
1422 { | |
1423 if ( !v58 ) | |
1424 break; | |
1425 ++v59; | |
1426 v58 = v57[v59]; | |
1427 } | |
1428 while ( v58 != 9 ); | |
1429 v34 = "\r"; | |
1430 } | |
1431 v60 = (int)&v57[v59]; | |
1432 if ( !v57[v59] ) | |
1433 v96 = 1; | |
1434 *(unsigned char *)v60 = 0; | |
1435 if ( v59 ) | |
1436 { | |
1437 if ( v56 ) | |
1438 *Strj = (char *)RemoveQuotes(v57); | |
1439 } | |
1440 else | |
1441 { | |
1442 if ( !v56 ) | |
1443 v96 = 1; | |
1444 } | |
1445 ++v56; | |
1446 v57 = (char *)(v60 + 1); | |
1447 } | |
1448 while ( v56 < 2 && !v96 ); | |
1449 ++Strj; | |
1450 } | |
1451 while ( (signed int)Strj <= (signed int)&pClassDescriptions[35] ); | |
1452 } | |
1453 | |
1454 //----- (00456D17) -------------------------------------------------------- | |
1455 void ItemsTable::SetSpecialBonus(ItemGen *pItem) | |
1456 { | |
1457 ItemDesc *v2; // eax@1 | |
1458 | |
1459 v2 = &this->pItems[pItem->uItemID]; | |
1460 if ( v2->uMaterial == 3 ) | |
1461 { | |
1462 pItem->_bonus_type = v2->_bonus_type; | |
1463 pItem->uAdditionalValue = v2->_additional_value; | |
1464 pItem->_bonus_strength = v2->_bonus_strength; | |
1465 } | |
1466 } | |
1467 | |
1468 //----- (00456D43) -------------------------------------------------------- | |
1469 bool ItemsTable::_456D43_is_material_equals_3(ItemGen *pItem) | |
1470 { | |
1471 return this->pItems[pItem->uItemID].uMaterial == 3; | |
1472 } | |
1473 | |
1474 //----- (00456D5E) -------------------------------------------------------- | |
1475 bool ItemsTable::_456D5E_is_some_material(ItemGen *pItem) | |
1476 { | |
1477 unsigned __int8 v2; // al@1 | |
1478 | |
1479 v2 = this->pItems[pItem->uItemID].uMaterial; | |
1480 return v2 == 3 || v2 == 1 || v2 == 2; | |
1481 } | |
1482 | |
1483 | |
1484 //----- (00453B3C) -------------------------------------------------------- | |
1485 void ItemsTable::LoadPotions() | |
1486 { | |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1487 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1488 CHAR Text[90]; // [sp+Ch] [bp-6Ch]@26 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1489 char* test_string; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1490 unsigned int uRow; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1491 unsigned int uColumn; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1492 unsigned __int8 potion_value; |
0 | 1493 |
1494 if ( pPotionsTXT_Raw ) | |
1495 pAllocator->FreeChunk(pPotionsTXT_Raw); | |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1496 pPotionsTXT_Raw = NULL; |
0 | 1497 pPotionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("potion.txt", 0); |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1498 test_string = strtok(pPotionsTXT_Raw,"\t\r\n"); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1499 while ( 1 ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1500 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1501 if ( !test_string ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1502 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1503 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1504 return; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1505 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1506 if ( !strcmp(test_string, "222") ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1507 break; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1508 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1509 test_string = strtok(NULL, "\t\r\n"); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1510 } |
0 | 1511 while ( 1 ) |
1512 { | |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1513 test_string = strtok(NULL, "\t\r\n"); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1514 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1515 if ( !test_string ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1516 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1517 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1518 return; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1519 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1520 if ( !strcmp(test_string, "222") ) |
0 | 1521 break; |
1522 } | |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1523 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1524 for (uRow = 0;uRow < 50; ++uRow) |
0 | 1525 { |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1526 int skip_count; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1527 for (skip_count = 0;skip_count < 6; ++skip_count) |
0 | 1528 { |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1529 if ( !strtok(NULL, "\r\t\n") ) |
0 | 1530 break; |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1531 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1532 if ( skip_count != 6 ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1533 break; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1534 for (uColumn = 0; uColumn < 50; ++uColumn) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1535 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1536 test_string = strtok(NULL, "\r\t\n"); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1537 if ( !test_string ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1538 break; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1539 potion_value = atoi(test_string); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1540 char c=*test_string; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1541 if ( !potion_value ) |
0 | 1542 { |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1543 if ( tolower(c) == 'e' ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1544 potion_value = atoi(test_string + 1); |
0 | 1545 else |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1546 potion_value = 0; |
0 | 1547 } |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1548 this->potion_data[uRow][uColumn]=potion_value; |
0 | 1549 } |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1550 if ( uColumn != 50 ) |
0 | 1551 break; |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1552 strtok(NULL, "\r\t\n"); |
0 | 1553 } |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1554 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1555 if ( uRow != 50 ) |
0 | 1556 { |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1557 wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1558 MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); |
0 | 1559 } |
1560 if ( pPotionsTXT_Raw ) | |
1561 { | |
1562 pAllocator->FreeChunk(pPotionsTXT_Raw); | |
1563 pPotionsTXT_Raw = 0; | |
1564 } | |
1565 } | |
1566 | |
1567 //----- (00453CE5) -------------------------------------------------------- | |
1568 void ItemsTable::LoadPotionNotes() | |
1569 { | |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1570 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1571 CHAR Text[90]; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1572 char* test_string; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1573 unsigned int uRow; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1574 unsigned int uColumn; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1575 unsigned __int8 potion_note; |
0 | 1576 |
1577 if ( pPotionNotesTXT_Raw ) | |
1578 pAllocator->FreeChunk(pPotionNotesTXT_Raw); | |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1579 pPotionNotesTXT_Raw = NULL; |
0 | 1580 pPotionNotesTXT_Raw = (char *)pEvents_LOD->LoadRaw("potnotes.txt", 0); |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1581 test_string = strtok(pPotionNotesTXT_Raw ,"\t\r\n"); |
0 | 1582 while ( 1 ) |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1583 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1584 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1585 if ( !test_string ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1586 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1587 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1588 return; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1589 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1590 if ( !strcmp(test_string, "222") ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1591 break; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1592 test_string = strtok(NULL, "\t\r\n"); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1593 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1594 while ( 1 ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1595 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1596 test_string = strtok(NULL, "\t\r\n"); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1597 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1598 if ( !test_string ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1599 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1600 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1601 return; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1602 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1603 if ( !strcmp(test_string, "222") ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1604 break; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1605 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1606 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1607 for (uRow = 0;uRow < 50; ++uRow) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1608 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1609 int skip_count; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1610 for (skip_count = 0;skip_count < 6; ++skip_count) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1611 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1612 if ( !strtok(NULL, "\r\t\n") ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1613 break; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1614 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1615 if ( skip_count != 6 ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1616 break; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1617 for (uColumn = 0; uColumn < 50; ++uColumn) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1618 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1619 test_string = strtok(NULL, "\r\t\n"); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1620 if ( !test_string ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1621 break; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1622 potion_note = atoi(test_string); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1623 char c=*test_string; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1624 if ( !potion_note ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1625 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1626 if ( tolower(c) == 'e' ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1627 potion_note = atoi(test_string + 1); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1628 else |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1629 potion_note = 0; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1630 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1631 this->potion_note[uRow][uColumn]=potion_note; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1632 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1633 if ( uColumn != 50 ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1634 break; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1635 strtok(NULL, "\r\t\n"); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1636 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1637 |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1638 if ( uRow != 50 ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1639 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1640 wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1641 MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1642 } |
0 | 1643 } |
1644 | |
1645 | |
1646 //----- (00456442) -------------------------------------------------------- | |
1647 unsigned int ItemGen::GetValue() | |
1648 { | |
1649 ItemGen *v1; // esi@1 | |
1650 unsigned int uBaseValue; // edi@1 | |
1651 int v3; // eax@4 | |
1652 int v4; // esi@5 | |
1653 unsigned int result; // eax@7 | |
1654 | |
1655 v1 = this; | |
1656 uBaseValue = pItemsTable->pItems[this->uItemID].uValue; | |
1657 if ( this->uAttributes & ITEM_TEMP_BONUS || pItemsTable->_456D5E_is_some_material(this) ) | |
1658 goto LABEL_12; | |
1659 if ( v1->_bonus_type ) | |
1660 { | |
1661 v3 = 100 * v1->_bonus_strength; | |
1662 return uBaseValue + v3; | |
1663 } | |
1664 v4 = v1->uAdditionalValue; | |
1665 if ( !v4 ) | |
1666 { | |
1667 LABEL_12: | |
1668 result = uBaseValue; | |
1669 } | |
1670 else | |
1671 { | |
1672 v3 = *(unsigned int *)&pItemsTable->pEnchantments[23].field_8[28 * v4 + 8]; | |
1673 if ( (unsigned int)v3 > 0xA ) | |
1674 return uBaseValue + v3; | |
1675 result = uBaseValue * v3; | |
1676 } | |
1677 return result; | |
1678 } | |
1679 | |
1680 //----- (00456499) -------------------------------------------------------- | |
1681 const char *ItemGen::GetDisplayName() | |
1682 { | |
1683 const char *result; // eax@2 | |
1684 | |
1685 if ( this->uAttributes & ITEM_IDENTIFIED ) | |
1686 result = GetIdentifiedName(); | |
1687 else | |
1688 result = pItemsTable->pItems[uItemID].pUnidentifiedName; | |
1689 return result; | |
1690 } | |
1691 | |
1692 //----- (004564B3) -------------------------------------------------------- | |
1693 const char *ItemGen::GetIdentifiedName() | |
1694 { | |
1695 ItemGen *v1; // esi@1 | |
1696 unsigned int v2; // eax@1 | |
1697 unsigned __int8 v3; // cl@1 | |
1698 char *v4; // edi@4 | |
1699 char v5; // al@6 | |
1700 const char *v6; // esi@8 | |
1701 int v7; // eax@15 | |
1702 const char *v9; // [sp-Ch] [bp-14h]@14 | |
1703 const char *v10; // [sp-8h] [bp-10h]@4 | |
1704 char *v11; // [sp-4h] [bp-Ch]@4 | |
1705 | |
1706 v1 = this; | |
1707 v2 = this->uItemID; | |
1708 v3 = pItemsTable->pItems[v2].uEquipType; | |
1709 if ( v3 >= EQUIP_REAGENT && (v3 <= EQUIP_POTION || v3 == EQUIP_GOLD) ) | |
1710 { | |
1711 v11 = pItemsTable->pItems[v2].pName; | |
1712 v4 = item__getname_buffer; | |
1713 v10 = "%s"; | |
1714 LABEL_10: | |
1715 sprintf(v4, v10, v11); | |
1716 return v4; | |
1717 } | |
1718 v4 = item__getname_buffer; | |
1719 sprintf(item__getname_buffer, "%s", pItemsTable->pItems[v2].pName); | |
1720 if ( v1->uItemID == 601 ) | |
1721 { | |
1722 v5 = v1->field_1A; | |
1723 if ( (unsigned __int8)v5 >= 1u ) | |
1724 { | |
1725 if ( (unsigned __int8)v5 <= 4u ) | |
1726 { | |
1727 v6 = pPlayers[(unsigned __int8)v5]->pName; | |
1728 strlen(pPlayers[(unsigned __int8)v5]->pName); | |
1729 v11 = (char *)v6; | |
1730 if ( v6[strlen(v6) - 1] == 115 ) | |
1731 v10 = pGlobalTXT_LocalizationStrings[655]; | |
1732 else | |
1733 v10 = pGlobalTXT_LocalizationStrings[654]; | |
1734 goto LABEL_10; | |
1735 } | |
1736 } | |
1737 } | |
1738 if ( !pItemsTable->_456D5E_is_some_material(v1) ) | |
1739 { | |
1740 if ( v1->_bonus_type ) | |
1741 { | |
1742 strcat(item__getname_buffer, " "); | |
1743 v9 = (const char *)*((unsigned int *)&pItemsTable->pItems[799].uEquipType + 5 * v1->_bonus_type); | |
1744 } | |
1745 else | |
1746 { | |
1747 v7 = v1->uAdditionalValue; | |
1748 if ( !v7 ) | |
1749 return v4; | |
1750 if ( v7 == 16 | |
1751 || v7 == 39 | |
1752 || v7 == 40 | |
1753 || v7 == 45 | |
1754 || v7 == 56 | |
1755 || v7 == 57 | |
1756 || v7 == 58 | |
1757 || v7 == 60 | |
1758 || v7 == 61 | |
1759 || v7 == 59 | |
1760 || v7 == 63 | |
1761 || v7 == 64 | |
1762 || v7 == 67 | |
1763 || v7 == 68 ) | |
1764 { | |
1765 sprintf( | |
1766 item__getname_buffer, | |
1767 "%s %s", | |
1768 *(unsigned int *)&pItemsTable->pEnchantments[22].field_8[28 * v7 + 8], | |
1769 pItemsTable->pItems[v1->uItemID].pName); | |
1770 return v4; | |
1771 } | |
1772 strcat(item__getname_buffer, " "); | |
1773 v9 = *(const char **)&pItemsTable->pEnchantments[22].field_8[28 * v1->uAdditionalValue + 8]; | |
1774 } | |
1775 strcat(item__getname_buffer, v9); | |
1776 } | |
1777 return v4; | |
1778 } | |
1779 | |
1780 | |
1781 //----- (00456620) -------------------------------------------------------- | |
201 | 1782 void ItemsTable::GenerateItem(int a2, int a3, ItemGen *out_item) |
0 | 1783 { |
201 | 1784 //ItemGen *v4; // esi@1 |
1785 //ItemsTable *v5; // edi@1 | |
0 | 1786 int v6; // ebx@3 |
1787 int *v7; // ecx@33 | |
201 | 1788 //int v8; // eax@34 |
1789 //int v9; // eax@39 | |
0 | 1790 int v10; // ebx@43 |
1791 int v11; // ecx@47 | |
1792 unsigned int *v12; // edx@48 | |
1793 unsigned int v13; // eax@49 | |
1794 signed int v14; // ebx@52 | |
1795 int v15; // eax@53 | |
1796 signed int v16; // eax@55 | |
1797 int v17; // ebx@57 | |
1798 int v18; // edx@62 | |
1799 signed int v19; // ebx@70 | |
1800 unsigned __int8 v20; // al@81 | |
1801 int v21; // eax@84 | |
1802 int v22; // ebx@85 | |
1803 int v23; // eax@86 | |
1804 int v24; // ebx@86 | |
1805 int v25; // edx@86 | |
1806 int v26; // edx@89 | |
1807 unsigned int v27; // eax@89 | |
1808 int i; // ebx@89 | |
1809 unsigned int v29; // ecx@90 | |
1810 int v30; // ebx@91 | |
1811 int v31; // eax@91 | |
1812 int v32; // ecx@91 | |
1813 int v33; // eax@91 | |
1814 int v34; // eax@97 | |
1815 unsigned __int8 v35; // sf@97 | |
1816 unsigned __int8 v36; // of@97 | |
1817 int v37; // ebx@98 | |
1818 int v38; // edx@99 | |
1819 signed int v39; // ebx@101 | |
1820 int v40; // ecx@102 | |
1821 char v41; // zf@107 | |
1822 char v42; // al@108 | |
1823 char v43; // al@111 | |
1824 int *v44; // edx@118 | |
1825 int v45; // eax@120 | |
1826 int v46; // edx@120 | |
1827 int *j; // eax@121 | |
1828 unsigned int v48; // ecx@123 | |
1829 int v49; // eax@123 | |
1830 int v50; // eax@123 | |
201 | 1831 int Dst[800]; // [sp+Ch] [bp-C88h]@33 |
0 | 1832 int v52; // [sp+C8Ch] [bp-8h]@33 |
201 | 1833 //int v53; // [sp+C90h] [bp-4h]@1 |
0 | 1834 int v54; // [sp+C9Ch] [bp+8h]@3 |
201 | 1835 //int v55; // [sp+CA0h] [bp+Ch]@34 |
0 | 1836 signed int v56; // [sp+CA0h] [bp+Ch]@55 |
1837 int v57; // [sp+CA0h] [bp+Ch]@62 | |
1838 int *v58; // [sp+CA0h] [bp+Ch]@102 | |
1839 int v59; // [sp+CA0h] [bp+Ch]@123 | |
201 | 1840 //signed int a2a; // [sp+CA4h] [bp+10h]@33 |
0 | 1841 int a2b; // [sp+CA4h] [bp+10h]@101 |
1842 int a2c; // [sp+CA4h] [bp+10h]@120 | |
1843 | |
201 | 1844 //v53 = -1; |
1845 //v4 = pItem; | |
1846 //v5 = this; | |
1847 if ( !out_item ) | |
1848 out_item = (ItemGen *)pAllocator->AllocNamedChunk(out_item, sizeof(*out_item), "newItemGen"); | |
1849 memset(out_item, 0, sizeof(*out_item)); | |
0 | 1850 v6 = a2 - 1; |
1851 v54 = a2 - 1; | |
1852 if ( a3 ) | |
1853 { | |
201 | 1854 ITEM_EQUIP_TYPE requested_equip; |
1855 PLAYER_SKILL_TYPE requested_skill = PLAYER_SKILL_INVALID; | |
1856 switch (a3) | |
0 | 1857 { |
201 | 1858 case 20: requested_equip = EQUIP_ONE_OR_TWO_HANDS; break; |
1859 case 21: requested_equip = EQUIP_ARMOUR; break; | |
1860 case 22: requested_skill = (PLAYER_SKILL_TYPE)38; __debugbreak();/*check this skill*/ break; | |
1861 case 23: requested_skill = PLAYER_SKILL_SWORD; break; | |
1862 case 24: requested_skill = PLAYER_SKILL_DAGGER; break; | |
1863 case 25: requested_skill = PLAYER_SKILL_AXE; break; | |
1864 case 26: requested_skill = PLAYER_SKILL_SPEAR; break; | |
1865 case 27: requested_skill = PLAYER_SKILL_BOW; break; | |
1866 case 28: requested_skill = PLAYER_SKILL_MACE; break; | |
1867 case 29: requested_skill = (PLAYER_SKILL_TYPE)37; __debugbreak();/*check this skill*/break; | |
1868 case 30: requested_skill = PLAYER_SKILL_STAFF; break; | |
1869 case 31: requested_skill = PLAYER_SKILL_LEATHER; break; | |
1870 case 32: requested_skill = PLAYER_SKILL_CHAIN; break; | |
1871 case 33: requested_skill = PLAYER_SKILL_PLATE; break; | |
1872 case 34: requested_equip = EQUIP_SHIELD; break; | |
1873 case 35: requested_equip = EQUIP_HELMET; break; | |
1874 case 36: requested_equip = EQUIP_BELT; break; | |
1875 case 37: requested_equip = EQUIP_CLOAK; break; | |
1876 case 38: requested_equip = EQUIP_GAUNTLETS; break; | |
1877 case 39: requested_equip = EQUIP_BOOTS; break; | |
1878 case 40: requested_equip = EQUIP_RING; break; | |
1879 case 41: requested_equip = EQUIP_AMULET; break; | |
1880 case 42: requested_equip = EQUIP_C; break; | |
1881 case 43: requested_equip = EQUIP_F; break; | |
1882 case 44: requested_equip = EQUIP_POTION; break; | |
1883 case 45: requested_equip = EQUIP_REAGENT; break; | |
1884 case 46: requested_equip = EQUIP_GEM; break; | |
0 | 1885 default: |
201 | 1886 __debugbreak(); // check this condition |
1887 requested_equip = (ITEM_EQUIP_TYPE)(a3 - 1); | |
0 | 1888 break; |
1889 } | |
201 | 1890 |
1891 memset(Dst, 0, sizeof(Dst)); | |
1892 | |
0 | 1893 v52 = 0; |
201 | 1894 v7 = Dst; |
1895 | |
1896 if (requested_skill == PLAYER_SKILL_INVALID) | |
0 | 1897 { |
201 | 1898 for (uint i = 1; i < 500; ++i) |
0 | 1899 { |
201 | 1900 if (pItems[i].uEquipType == requested_equip) |
0 | 1901 { |
201 | 1902 *v7++ = i; |
1903 v52 += pItems[i].field_2C[v6]; | |
0 | 1904 } |
1905 } | |
1906 } | |
1907 else | |
1908 { | |
201 | 1909 for (uint i = 1; i < 500; ++i) |
0 | 1910 { |
201 | 1911 if (pItems[i].uSkillType == requested_skill) |
0 | 1912 { |
201 | 1913 *v7++ = i; |
1914 v52 += pItems[i].field_2C[v6]; | |
0 | 1915 } |
1916 } | |
1917 } | |
201 | 1918 |
0 | 1919 v10 = 0; |
1920 if ( v52 ) | |
1921 v10 = rand() % v52; | |
201 | 1922 out_item->uItemID = *Dst; |
1923 if ( !*Dst ) | |
1924 out_item->uItemID = 1; | |
1925 v11 = pItems[out_item->uItemID].field_2C[v54]; | |
0 | 1926 if ( v11 < v10 ) |
1927 { | |
1928 v12 = (uint *)Dst; | |
1929 do | |
1930 { | |
1931 ++v12; | |
1932 v13 = *v12; | |
201 | 1933 out_item->uItemID = *v12; |
1934 v11 += pItems[v13].field_2C[v54]; | |
0 | 1935 } |
1936 while ( v11 < v10 ); | |
1937 } | |
201 | 1938 if (pItems[out_item->uItemID].uEquipType == EQUIP_POTION && out_item->uItemID != ITEM_POTION_BOTTLE) |
0 | 1939 { |
201 | 1940 out_item->_bonus_type = 0; |
0 | 1941 v14 = 2; |
1942 do | |
1943 { | |
201 | 1944 out_item->_bonus_type += rand() % 4 + 1; |
1945 v15 = out_item->_bonus_type; | |
0 | 1946 --v14; |
1947 } | |
1948 while ( v14 ); | |
1949 LABEL_72: | |
201 | 1950 out_item->_bonus_type = v15 * (v54 + 1); |
0 | 1951 goto LABEL_73; |
1952 } | |
1953 } | |
1954 else | |
1955 { | |
1956 v16 = 0; | |
1957 v56 = 0; | |
1958 do | |
1959 v56 += pParty->field_7BA[v16++]; | |
1960 while ( v16 < 29 ); | |
1961 v17 = rand() % 29; | |
1962 if ( v54 == 5 && rand() % 100 < 5 && !pParty->field_7BA[v17] && v56 < 13 ) | |
1963 { | |
1964 pParty->field_7BA[v17] = 1; | |
201 | 1965 out_item->uAttributes = 0; |
1966 out_item->uItemID = v17 + 500; | |
1967 SetSpecialBonus(out_item); | |
0 | 1968 return; |
1969 } | |
1970 v57 = 0; | |
201 | 1971 v18 = rand() % field_11684[v54]; |
1972 out_item->uItemID = 0; | |
0 | 1973 if ( v18 > 0 ) |
1974 { | |
1975 do | |
201 | 1976 v57 += pItems[out_item->uItemID++ + 1].field_2C[v54]; |
0 | 1977 while ( v57 < v18 ); |
1978 } | |
1979 if ( !v18 ) | |
201 | 1980 out_item->uItemID = 1; |
1981 if ( !out_item->uItemID ) | |
1982 out_item->uItemID = 1; | |
1983 if ( pItems[out_item->uItemID].uEquipType == EQUIP_POTION && out_item->uItemID != ITEM_POTION_BOTTLE ) | |
0 | 1984 { |
201 | 1985 out_item->_bonus_type = 0; |
0 | 1986 v19 = 2; |
1987 do | |
1988 { | |
201 | 1989 out_item->_bonus_type += rand() % 4 + 1; |
1990 v15 = out_item->_bonus_type; | |
0 | 1991 --v19; |
1992 } | |
1993 while ( v19 ); | |
1994 goto LABEL_72; | |
1995 } | |
1996 } | |
1997 LABEL_73: | |
201 | 1998 if (out_item->uItemID == ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION |
0 | 1999 && !(unsigned __int16)_449B57_test_bit(pParty->_award_bits, 239) ) |
201 | 2000 out_item->uItemID = ITEM_SPELLBOOK_LIGHT_SUN_BURST; |
2001 if ( BYTE2(pItems[out_item->uItemID + 1].uItemID) ) | |
2002 out_item->uAttributes = 0; | |
0 | 2003 else |
201 | 2004 out_item->uAttributes = 1; |
2005 if (pItems[out_item->uItemID].uEquipType != EQUIP_POTION ) | |
0 | 2006 { |
201 | 2007 out_item->uAdditionalValue = 0; |
2008 out_item->_bonus_type = 0; | |
0 | 2009 } |
201 | 2010 v20 = pItems[out_item->uItemID].uEquipType; |
0 | 2011 if ( v20 <= EQUIP_BOW ) |
2012 { | |
201 | 2013 v37 = (int)&field_1169C[4 * v54 + 48]; |
0 | 2014 if ( !*(unsigned int *)v37 ) |
2015 return; | |
2016 v38 = rand() % 100; | |
2017 v36 = __OFSUB__(v38, *(unsigned int *)v37); | |
2018 v35 = v38 - *(unsigned int *)v37 < 0; | |
2019 } | |
2020 else | |
2021 { | |
2022 if ( v20 > EQUIP_AMULET ) | |
2023 { | |
2024 if ( v20 == EQUIP_C ) | |
2025 { | |
201 | 2026 v21 = rand() % 6 + pItems[out_item->uItemID].uDamageMod + 1; |
2027 out_item->uNumCharges = v21; | |
2028 out_item->uMaxCharges = v21; | |
0 | 2029 } |
2030 return; | |
2031 } | |
201 | 2032 v22 = (int)&field_1169C[4 * v54]; |
0 | 2033 if ( !*(unsigned int *)v22 ) |
2034 return; | |
2035 v23 = rand(); | |
2036 v24 = *(unsigned int *)v22; | |
2037 v25 = v23 % 100; | |
2038 if ( v23 % 100 < v24 ) | |
2039 goto LABEL_127; | |
201 | 2040 if ( !*(unsigned int *)&field_1169C[4 * v54 + 24] ) |
0 | 2041 return; |
2042 if ( v25 < v24 ) | |
2043 { | |
2044 LABEL_127: | |
201 | 2045 v26 = rand() % field_116D8[pItems[out_item->uItemID].uEquipType]; |
2046 v27 = out_item->uItemID; | |
2047 out_item->_bonus_type = 0; | |
2048 for ( i = pEnchantments[0].field_8[pItems[v27].uEquipType + 1]; | |
0 | 2049 i < v26; |
201 | 2050 i += pEnchantments[out_item->_bonus_type].field_8[pItems[v29].uEquipType + 1] ) |
0 | 2051 { |
201 | 2052 v29 = out_item->uItemID; |
2053 ++out_item->_bonus_type; | |
0 | 2054 } |
201 | 2055 ++out_item->_bonus_type; |
2056 v30 = field_116D8[2 * v54 + 12]; | |
0 | 2057 v31 = rand(); |
201 | 2058 v32 = out_item->_bonus_type - 1; |
2059 v33 = v31 % (field_116D8[2 * v54 + 13] - v30 + 1) + v30; | |
2060 out_item->_bonus_strength = v33; | |
0 | 2061 if ( v32 == 21 || v32 == 22 || v32 == 23 ) |
201 | 2062 out_item->_bonus_strength = v33 >> 1; |
2063 if ( out_item->_bonus_strength <= 0 ) | |
2064 out_item->_bonus_strength = 1; | |
0 | 2065 return; |
2066 } | |
201 | 2067 v34 = v24 + *(unsigned int *)&field_1169C[4 * v54 + 24]; |
0 | 2068 v36 = __OFSUB__(v25, v34); |
2069 v35 = v25 - v34 < 0; | |
2070 } | |
2071 if ( !(v35 ^ v36) ) | |
2072 return; | |
2073 memset(&Dst, 0, 0xC80u); | |
2074 v39 = 0; | |
2075 a2b = 0; | |
201 | 2076 if ( field_11798 > 0 ) |
0 | 2077 { |
201 | 2078 v52 = -16 - (uint)this; |
0 | 2079 v58 = (int *)&Dst; |
201 | 2080 v40 = (int)&pSpecialEnchantments[1]; |
0 | 2081 do |
2082 { | |
2083 switch ( v54 ) | |
2084 { | |
2085 case 2: | |
2086 if ( !*(unsigned char *)v40 ) | |
2087 goto LABEL_117; | |
2088 v41 = *(unsigned char *)v40 == 1; | |
2089 break; | |
2090 case 3: | |
2091 v43 = *(unsigned char *)v40; | |
2092 if ( !*(unsigned char *)v40 || v43 == 1 ) | |
2093 { | |
2094 LABEL_117: | |
201 | 2095 v39 += *((unsigned char *)&pItems[0].uItemID + v40 + v52 + pItems[out_item->uItemID].uEquipType); |
2096 if ( *((unsigned char *)&pItems[0].uItemID + v40 + v52 + pItems[out_item->uItemID].uEquipType) ) | |
0 | 2097 { |
2098 v44 = v58; | |
2099 ++v58; | |
2100 *v44 = a2b; | |
2101 } | |
2102 goto LABEL_119; | |
2103 } | |
2104 v41 = v43 == 2; | |
2105 break; | |
2106 case 4: | |
2107 v42 = *(unsigned char *)v40; | |
2108 if ( *(unsigned char *)v40 == 1 || v42 == 2 ) | |
2109 goto LABEL_117; | |
2110 v41 = v42 == 3; | |
2111 break; | |
2112 default: | |
2113 if ( v54 != 5 ) | |
2114 goto LABEL_119; | |
2115 v41 = *(unsigned char *)v40 == 3; | |
2116 break; | |
2117 } | |
2118 if ( v41 ) | |
2119 goto LABEL_117; | |
2120 LABEL_119: | |
2121 ++a2b; | |
2122 v40 += 28; | |
2123 } | |
201 | 2124 while ( a2b < field_11798 ); |
0 | 2125 } |
2126 v45 = rand(); | |
201 | 2127 out_item->uAdditionalValue = *Dst; |
0 | 2128 v46 = v45 % v39 + 1; |
201 | 2129 a2c = *((unsigned char *)&pItems[0].uItemID + 28 * (*(uint *)Dst + 1389) + pItems[out_item->uItemID].uEquipType); |
0 | 2130 if ( a2c < v46 ) |
2131 { | |
2132 for ( j = (int *)&Dst; ; j = (int *)v59 ) | |
2133 { | |
201 | 2134 v48 = out_item->uItemID; |
0 | 2135 v49 = (int)(j + 1); |
2136 v59 = v49; | |
2137 v50 = *(unsigned int *)v49; | |
201 | 2138 out_item->uAdditionalValue = v50; |
2139 a2c += *((unsigned char *)&pItems[0].uItemID + 28 * (v50 + 1389) + pItems[v48].uEquipType); | |
0 | 2140 if ( a2c >= v46 ) |
2141 break; | |
2142 } | |
2143 } | |
201 | 2144 ++out_item->uAdditionalValue; |
0 | 2145 } |
2146 | |
2147 //----- (004505CC) -------------------------------------------------------- | |
2148 bool ItemGen::GenerateArtifact() | |
2149 { | |
2150 ItemGen *v1; // edi@1 | |
2151 signed int uNumArtifactsNotFound; // esi@1 | |
2152 int v3; // eax@1 | |
2153 bool result; // eax@6 | |
2154 int v5[32]; // [sp+8h] [bp-A0h]@3 | |
2155 char Dst[32]; // [sp+88h] [bp-20h]@1 | |
2156 | |
2157 auto a2 = this; | |
2158 v1 = a2; | |
2159 memset(Dst, 0, 0x20u); | |
2160 uNumArtifactsNotFound = 0; | |
2161 v3 = 500; | |
2162 do | |
2163 { | |
2164 if ( !pParty->field_3C.pIsArtifactFound[v3] ) | |
2165 v5[uNumArtifactsNotFound++] = v3; | |
2166 ++v3; | |
2167 } | |
2168 while ( v3 < 529 ); | |
2169 v1->Reset(); | |
2170 if ( uNumArtifactsNotFound ) | |
2171 { | |
2172 v1->uItemID = v5[rand() % uNumArtifactsNotFound]; | |
2173 pItemsTable->SetSpecialBonus(v1); | |
2174 result = 1; | |
2175 } | |
2176 else | |
2177 { | |
2178 result = 0; | |
2179 } | |
2180 return result; | |
2181 } | |
2182 // 4505CC: using guessed type int var_A0[32]; |