Mercurial > mm7
annotate Items.cpp @ 222:8113753ed2ae
more item init fixing
author | Gloval |
---|---|
date | Sun, 17 Feb 2013 11:29:10 +0400 |
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 | |
222 | 251 unsigned char *v7; // eax@21 |
252 unsigned char *v8; // ecx@22 | |
0 | 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 | |
222 | 348 int i,j; |
349 char* test_string; | |
350 char c; | |
351 bool break_loop; | |
352 unsigned int temp_str_len; | |
353 char* tmp_pos; | |
354 int decode_step; | |
355 int item_counter; | |
0 | 356 //v1 = this; |
357 | |
358 pMapStats = new MapStats; | |
359 pMapStats->Initialize(); | |
360 | |
361 pMonsterStats = new MonsterStats; | |
362 pMonsterStats->Initialize(); | |
363 pMonsterStats->InitializePlacements(); | |
364 | |
365 pSpellStats = new SpellStats; | |
366 pSpellStats->Initialize(); | |
367 | |
368 LoadPotions(); | |
369 LoadPotionNotes(); | |
370 | |
371 pFactionTable = new FactionTable; | |
372 pFactionTable->Initialize(); | |
373 | |
374 pStorylineText = new StorylineText; | |
375 pStorylineText->Initialize(); | |
376 | |
377 pStdItemsTXT_Raw = 0; | |
222 | 378 pStdItemsTXT_Raw = (char *)pEvents_LOD->LoadRaw("stditems.txt", 0); |
379 strtok(pStdItemsTXT_Raw, "\r"); | |
380 strtok(NULL, "\r"); | |
381 strtok(NULL, "\r"); | |
382 strtok(NULL, "\r"); | |
383 //Standard Bonuses by Group | |
384 for (i=0;i<24;++i) | |
385 { | |
386 test_string = strtok(NULL, "\r") + 1; | |
387 break_loop = false; | |
388 decode_step=0; | |
389 do | |
390 { | |
391 c = *(unsigned char*)test_string; | |
392 temp_str_len = 0; | |
393 while((c!='\t')&&(c>0)) | |
394 { | |
395 ++temp_str_len; | |
396 c=test_string[temp_str_len]; | |
397 } | |
398 tmp_pos=test_string+temp_str_len; | |
399 if (*tmp_pos == 0) | |
400 break_loop = true; | |
401 *tmp_pos = 0; | |
402 if (temp_str_len) | |
403 { | |
404 switch (decode_step) | |
405 { | |
406 case 0: | |
407 pEnchantments[i].pBonusStat=RemoveQuotes(test_string); | |
408 break; | |
409 case 1: | |
410 pEnchantments[i].pOfName= RemoveQuotes(test_string); | |
411 break; | |
412 default: | |
413 pEnchantments[i].to_item[decode_step-2]=atoi(test_string); | |
414 } | |
415 } | |
416 else | |
417 { | |
418 if (!decode_step) | |
419 break_loop = true; | |
420 } | |
421 ++decode_step; | |
422 test_string=tmp_pos+1; | |
423 } while ((decode_step<11)&&!break_loop); | |
424 } | |
425 //Value Mod= (+100 / Plus of Item)? | |
426 | |
427 memset(&pEnchantmentsSumm, 0, 36); | |
428 for(i=0;i<9;++i) | |
429 { | |
430 for (j=0;j<24;++j) | |
431 pEnchantmentsSumm[i]+=pEnchantments[j].to_item[i]; | |
432 } | |
433 | |
434 //Bonus range for Standard by Level | |
435 strtok(NULL, "\r"); | |
436 strtok(NULL, "\r"); | |
437 strtok(NULL, "\r"); | |
438 strtok(NULL, "\r"); | |
439 strtok(NULL, "\r"); | |
440 for(i=0;i<6;++i) //counted from 1 | |
441 { | |
442 test_string = strtok(NULL, "\r") + 1; | |
443 break_loop = false; | |
444 decode_step=0; | |
445 do | |
446 { | |
447 c = *(unsigned char*)test_string; | |
448 temp_str_len = 0; | |
449 while((c!='\t')&&(c>0)) | |
450 { | |
451 ++temp_str_len; | |
452 c=test_string[temp_str_len]; | |
453 } | |
454 tmp_pos=test_string+temp_str_len; | |
455 if (*tmp_pos == 0) | |
456 break_loop = true; | |
457 *tmp_pos = 0; | |
458 if (decode_step==2) | |
459 bonus_ranges[i].minR = atoi(test_string); | |
460 else if (decode_step==3) | |
461 bonus_ranges[i].maxR =atoi(test_string); | |
462 ++decode_step; | |
463 test_string=tmp_pos+1; | |
464 } while ((decode_step<4)&&!break_loop); | |
465 } | |
466 | |
467 | |
0 | 468 pSpcItemsTXT_Raw = 0; |
222 | 469 pSpcItemsTXT_Raw = (char *)pEvents_LOD->LoadRaw("spcitems.txt", 0); |
470 strtok(pSpcItemsTXT_Raw, "\r"); | |
471 strtok(NULL, "\r"); | |
472 strtok(NULL, "\r"); | |
473 strtok(NULL, "\r"); | |
474 for (i=0;i<72;++i) | |
475 { | |
476 test_string = strtok(NULL, "\r") + 1; | |
477 break_loop = false; | |
478 decode_step=0; | |
479 do | |
480 { | |
481 c = *(unsigned char*)test_string; | |
482 temp_str_len = 0; | |
483 while((c!='\t')&&(c>0)) | |
484 { | |
485 ++temp_str_len; | |
486 c=test_string[temp_str_len]; | |
487 } | |
488 tmp_pos=test_string+temp_str_len; | |
489 if (*tmp_pos == 0) | |
490 break_loop = true; | |
491 *tmp_pos = 0; | |
492 if (temp_str_len) | |
493 { | |
494 switch (decode_step) | |
495 { | |
496 case 0: | |
497 pSpecialEnchantments[i].pBonusStatement=RemoveQuotes(test_string); | |
498 break; | |
499 case 1: | |
500 pSpecialEnchantments[i].pNameAdd= RemoveQuotes(test_string); | |
501 break; | |
502 case 14: | |
503 int res; | |
504 res=atoi(test_string); | |
505 if(!res) | |
506 { | |
507 ++test_string; | |
508 while (*test_string==' ')//fix X 2 case | |
509 ++test_string; | |
510 res=atoi(test_string); | |
511 } | |
512 pSpecialEnchantments[i].iValue=res; | |
513 break; | |
514 case 15: | |
515 pSpecialEnchantments[i].iTreasureLevel= tolower(*test_string) - 97;; | |
516 break; | |
517 default: | |
518 pSpecialEnchantments[i].to_item_apply[decode_step-2]=atoi(test_string); | |
519 } | |
520 } | |
521 else | |
522 { | |
523 if (!decode_step) | |
524 break_loop = true; | |
525 } | |
526 ++decode_step; | |
527 test_string=tmp_pos+1; | |
528 } while ((decode_step<16)&&!break_loop); | |
529 } | |
530 | |
531 pSpecialEnchantments_count = 71; | |
532 memset(&pSpecialEnchantmentsSumm, 0, 96); | |
533 for(i=0;i<12;++i) | |
534 { | |
535 for (j=0;j<pSpecialEnchantments_count;++j) | |
536 pSpecialEnchantmentsSumm[i]+=pSpecialEnchantments[j].to_item_apply[i]; | |
537 } | |
538 | |
539 | |
540 | |
0 | 541 Initialize2DA(); |
222 | 542 |
543 pItemsTXT_Raw = NULL; | |
544 pItemsTXT_Raw = (char*) pEvents_LOD->LoadRaw("items.txt", 0); | |
545 strtok(pItemsTXT_Raw, "\r"); | |
546 strtok(NULL, "\r"); | |
547 uAllItemsCount = 0; | |
548 item_counter = 0; | |
549 while (true) | |
550 { | |
551 test_string = strtok(NULL, "\r") + 1; | |
552 break_loop = false; | |
553 decode_step=0; | |
554 do | |
555 { | |
556 c = *(unsigned char*)test_string; | |
557 temp_str_len = 0; | |
558 while((c!='\t')&&(c>0)) | |
559 { | |
560 ++temp_str_len; | |
561 c=test_string[temp_str_len]; | |
562 } | |
563 tmp_pos=test_string+temp_str_len; | |
564 if (*tmp_pos == 0) | |
565 break_loop = true; | |
566 *tmp_pos = 0; | |
567 if (temp_str_len) | |
568 { | |
569 switch (decode_step) | |
570 { | |
571 case 0: //Item # | |
572 item_counter=atoi(test_string); | |
573 uAllItemsCount=item_counter; | |
574 break; | |
575 case 1: //Pic File | |
576 pItems[item_counter].pIconName = RemoveQuotes(test_string); | |
577 break; | |
578 case 2: //Name | |
579 pItems[item_counter].pName = RemoveQuotes(test_string); | |
580 break; | |
581 case 3: //Value | |
582 pItems[item_counter].uValue=atoi(test_string); | |
583 break; | |
584 case 4: //Equip Stat | |
585 { | |
586 if ( !_strcmpi(test_string, "weapon") ) | |
587 { | |
588 pItems[item_counter].uEquipType = 0; | |
589 break; | |
590 } | |
591 if ( !_strcmpi(test_string, "weapon2") ) | |
592 { | |
593 pItems[item_counter].uEquipType = 1; | |
594 break; | |
595 } | |
596 if ( !_strcmpi(test_string, "weapon1or2") ) | |
597 { | |
598 pItems[item_counter].uEquipType = 0; | |
599 break; | |
600 } | |
601 if ( !(_strcmpi(test_string, "missile")&&_strcmpi(test_string, "bow"))) | |
602 { | |
603 pItems[item_counter].uEquipType = 2; | |
604 break; | |
605 } | |
606 if ( !_strcmpi(test_string, "armor") ) | |
607 { | |
608 pItems[item_counter].uEquipType = 3; | |
609 break; | |
610 } | |
611 if ( !_strcmpi(test_string, "shield") ) | |
612 { | |
613 pItems[item_counter].uEquipType = 4; | |
614 break; | |
615 } | |
616 if ( !_strcmpi(test_string, "helm") ) | |
617 { | |
618 pItems[item_counter].uEquipType = 5; | |
619 break; | |
620 } | |
621 if ( !_strcmpi(test_string, "belt") ) | |
622 { | |
623 pItems[item_counter].uEquipType = 6; | |
624 break; | |
625 } | |
626 if ( !_strcmpi(test_string, "cloak") ) | |
627 { | |
628 pItems[item_counter].uEquipType = 7; | |
629 break; | |
630 } | |
631 if ( !_strcmpi(test_string, "gauntlets") ) | |
632 { | |
633 pItems[item_counter].uEquipType = 8; | |
634 break; | |
635 } | |
636 if ( !_strcmpi(test_string, "boots") ) | |
637 { | |
638 pItems[item_counter].uEquipType = 9; | |
639 break; | |
640 } | |
641 if ( !_strcmpi(test_string, "ring") ) | |
642 { | |
643 pItems[item_counter].uEquipType = 10; | |
644 break; | |
645 } | |
646 if ( !_strcmpi(test_string, "amulet") ) | |
647 { | |
648 pItems[item_counter].uEquipType = 11; | |
649 break; | |
650 } | |
651 if ( !_strcmpi(test_string, "weaponw") ) | |
652 { | |
653 pItems[item_counter].uEquipType = 12; | |
654 break; | |
655 } | |
656 if ( !(_strcmpi(test_string, "herb")&&_strcmpi(test_string, "reagent"))) | |
657 { | |
658 pItems[item_counter].uEquipType = 13; | |
659 break; | |
660 } | |
661 if ( !_strcmpi(test_string, "bottle") ) | |
662 { | |
663 pItems[item_counter].uEquipType = 14; | |
664 break; | |
665 } | |
666 if ( !_strcmpi(test_string, "sscroll") ) | |
667 { | |
668 pItems[item_counter].uEquipType = 15; | |
669 break; | |
670 } | |
671 if ( !_strcmpi(test_string, "book") ) | |
672 { | |
673 pItems[item_counter].uEquipType = 16; | |
674 break; | |
675 } | |
676 if ( !_strcmpi(test_string, "mscroll") ) | |
677 { | |
678 pItems[item_counter].uEquipType = 17; | |
679 break; | |
680 } | |
681 if ( !_strcmpi(test_string, "gold") ) | |
682 { | |
683 pItems[item_counter].uEquipType = 18; | |
684 break; | |
685 } | |
686 if ( !_strcmpi(test_string, "gem") ) | |
687 { | |
688 pItems[item_counter].uEquipType = 19; | |
689 break; | |
690 } | |
691 pItems[item_counter].uEquipType = 20; | |
692 break; | |
693 } | |
694 case 5: //Skill Group | |
695 { | |
696 if ( !_strcmpi(test_string, "staff") ) | |
697 { | |
698 pItems[item_counter].uSkillType = 0; | |
699 break; | |
700 } | |
701 if ( !_strcmpi(test_string, "sword") ) | |
702 { | |
703 pItems[item_counter].uSkillType = 1; | |
704 break; | |
705 } | |
706 if ( !_strcmpi(test_string, "dagger") ) | |
707 { | |
708 pItems[item_counter].uSkillType = 2; | |
709 break; | |
710 } | |
711 if ( !_strcmpi(test_string, "axe") ) | |
712 { | |
713 pItems[item_counter].uSkillType = 3; | |
714 break; | |
715 } | |
716 if ( !_strcmpi(test_string, "spear") ) | |
717 { | |
718 pItems[item_counter].uSkillType = 4; | |
719 break; | |
720 } | |
721 if ( !_strcmpi(test_string, "bow") ) | |
722 { | |
723 pItems[item_counter].uSkillType = 5; | |
724 break; | |
725 } | |
726 if ( !_strcmpi(test_string, "mace") ) | |
727 { | |
728 pItems[item_counter].uSkillType = 6; | |
729 break; | |
730 } | |
731 if ( !_strcmpi(test_string, "blaster") ) | |
732 { | |
733 pItems[item_counter].uSkillType = 7; | |
734 break; | |
735 } | |
736 if ( !_strcmpi(test_string, "shield") ) | |
737 { | |
738 pItems[item_counter].uSkillType = 8; | |
739 break; | |
740 } | |
741 if ( !_strcmpi(test_string, "leather") ) | |
742 { | |
743 pItems[item_counter].uSkillType = 9; | |
744 break; | |
745 } | |
746 if ( !_strcmpi(test_string, "chain") ) | |
747 { | |
748 pItems[item_counter].uSkillType = 10; | |
749 break; | |
750 } | |
751 if ( !_strcmpi(test_string, "plate") ) | |
752 { | |
753 pItems[item_counter].uSkillType = 11; | |
754 break; | |
755 } | |
756 if ( !_strcmpi(test_string, "club") ) | |
757 { | |
758 pItems[item_counter].uSkillType = 37; | |
759 break; | |
760 } | |
761 pItems[item_counter].uSkillType = 38; | |
762 break; | |
763 } | |
764 case 6: //Mod1 | |
765 { | |
766 int ii; | |
767 char* test_char; | |
768 int tst_len; | |
769 tst_len=strlen(test_string); | |
770 pItems[item_counter].uDamageDice=0; | |
771 pItems[item_counter].uDamageRoll=0; | |
772 test_char=test_string; | |
773 for (ii=0; ii<tst_len; ++ii) | |
774 { | |
775 if (tolower(*test_char)=='d') | |
776 { | |
777 *test_char=0; | |
778 pItems[item_counter].uDamageDice=atoi(test_string); | |
779 pItems[item_counter].uDamageRoll=atoi(test_char+1); | |
780 *test_char='d'; | |
781 break; | |
782 } | |
783 ++test_char; | |
784 } | |
785 test_char=test_string; | |
786 if ((ii==tst_len)&&(tolower(*test_char)=='s')) | |
787 { | |
788 pItems[item_counter].uDamageDice=atoi(test_char+1); | |
789 pItems[item_counter].uDamageRoll=1; | |
790 } | |
791 break; | |
792 } | |
793 case 7: //Mod2 | |
794 pItems[item_counter].uDamageMod=atoi(test_string); | |
795 break; | |
796 case 8: //material | |
797 { | |
798 if ( !_strcmpi(test_string, "artifact") ) | |
799 { | |
800 pItems[item_counter].uMaterial = 1; | |
801 break; | |
802 } | |
803 if ( !_strcmpi(test_string, "relic") ) | |
804 { | |
805 pItems[item_counter].uMaterial = 2; | |
806 break; | |
807 } | |
808 if ( !_strcmpi(test_string, "special") ) | |
809 { | |
810 pItems[item_counter].uMaterial = 3; | |
811 break; | |
812 } | |
813 pItems[item_counter].uMaterial = 0; | |
814 break;} | |
815 case 9: //ID/Rep/St | |
816 pItems[item_counter].uItemID_Rep_St=atoi(test_string); | |
817 break; | |
818 case 10: //Not identified name | |
819 pItems[item_counter].pUnidentifiedName = RemoveQuotes(test_string); | |
820 break; | |
821 case 11: //Sprite Index | |
822 pItems[item_counter].uSpriteID=atoi(test_string); | |
823 break; | |
824 case 12: //VarA | |
825 pItems[item_counter]._additional_value=0; | |
826 pItems[item_counter]._bonus_type=0; | |
827 if (pItems[item_counter].uMaterial==3) | |
828 { | |
829 for(int ii=0; ii<24; ++ii) | |
830 { | |
831 if (stricmp(test_string,pEnchantments[ii].pBonusStat)) | |
832 { | |
833 pItems[item_counter]._bonus_type=ii+1; | |
834 break; | |
835 } | |
836 } | |
837 if (!pItems[item_counter]._bonus_type) | |
838 { | |
839 for(int ii=0; ii<72; ++ii) | |
840 { | |
841 if (stricmp(test_string,pSpecialEnchantments[ii].pBonusStatement)) | |
842 { | |
843 pItems[item_counter]._additional_value=ii+1; | |
844 } | |
845 } | |
846 } | |
847 } | |
848 | |
849 break; | |
850 case 13: //VarB | |
851 if ((pItems[item_counter].uMaterial==3)&&(pItems[item_counter]._bonus_type)) | |
852 { | |
853 char b_s=atoi(test_string); | |
854 if (b_s) | |
855 pItems[item_counter]._bonus_strength=b_s; | |
856 else | |
857 pItems[item_counter]._bonus_strength=1; | |
858 } | |
859 else | |
860 pItems[item_counter]._bonus_strength=0; | |
861 break; | |
862 case 14: //Equip X | |
863 pItems[item_counter].uEquipX=atoi(test_string); | |
864 break; | |
865 case 15: //Equip Y | |
866 pItems[item_counter].uEquipY=atoi(test_string); | |
867 break; | |
868 case 16: //Notes | |
869 pItems[item_counter].pDescription = RemoveQuotes(test_string); | |
870 break; | |
871 | |
872 } | |
873 } | |
874 else | |
875 { | |
876 if (!decode_step) | |
877 break_loop = true; | |
878 } | |
879 ++decode_step; | |
880 test_string=tmp_pos+1; | |
881 } while ((decode_step<17)&&!break_loop); | |
882 ++item_counter; | |
883 if (item_counter>799) | |
884 break; | |
885 } | |
886 | |
887 /* | |
0 | 888 while ( 2 ) |
889 { | |
890 v100 = 0; | |
891 v25 = strtok(0, "\r") + 1; | |
892 v91 = 0; | |
893 while ( 2 ) | |
894 { | |
895 v26 = *v25; | |
896 v27 = 0; | |
897 while ( v26 != 9 && v26 ) | |
898 { | |
899 ++v27; | |
900 v26 = v25[v27]; | |
901 } | |
902 v75 = (int)&v25[v27]; | |
903 if ( !v25[v27] ) | |
904 v91 = 1; | |
905 v25[v27] = 0; | |
906 if ( v27 ) | |
907 { | |
908 switch ( v100 ) | |
909 { | |
910 case 0: | |
911 v24 = atoi(v25); | |
912 break; | |
913 case 1: | |
914 pItems[v24].pIconName = (char *)RemoveQuotes(v25); | |
915 break; | |
916 case 2: | |
917 pItems[v24].pName = (char *)RemoveQuotes(v25); | |
918 break; | |
919 case 3: | |
920 pItems[v24].uValue = atoi(v25); | |
921 break; | |
922 case 4: | |
923 if ( !_strcmpi(v25, "weapon") ) | |
924 goto LABEL_89; | |
925 if ( _strcmpi(v25, "weapon2") ) | |
926 { | |
927 if ( _strcmpi(v25, "weapon1or2") ) | |
928 { | |
929 if ( _strcmpi(v25, "missile") && _strcmpi(v25, "bow") ) | |
930 { | |
931 if ( _strcmpi(v25, "armor") ) | |
932 { | |
933 if ( _strcmpi(v25, "shield") ) | |
934 { | |
935 if ( _strcmpi(v25, "helm") ) | |
936 { | |
937 if ( _strcmpi(v25, "belt") ) | |
938 { | |
939 if ( _strcmpi(v25, "cloak") ) | |
940 { | |
941 if ( _strcmpi(v25, "gauntlets") ) | |
942 { | |
943 if ( _strcmpi(v25, "boots") ) | |
944 { | |
945 if ( _strcmpi(v25, "ring") ) | |
946 { | |
947 if ( _strcmpi(v25, "amulet") ) | |
948 { | |
949 if ( _strcmpi(v25, "weaponw") ) | |
950 { | |
951 if ( _strcmpi(v25, "herb") && _strcmpi(v25, "reagent") ) | |
952 { | |
953 if ( _strcmpi(v25, "bottle") ) | |
954 { | |
955 if ( _strcmpi(v25, "sscroll") ) | |
956 { | |
957 if ( _strcmpi(v25, "book") ) | |
958 { | |
959 if ( _strcmpi(v25, "mscroll") ) | |
960 { | |
961 if ( _strcmpi(v25, "gold") ) | |
962 { | |
963 if ( _strcmpi(v25, "gem") ) | |
964 pItems[v24].uEquipType = 20; | |
965 else | |
966 pItems[v24].uEquipType = 19; | |
967 } | |
968 else | |
969 { | |
970 pItems[v24].uEquipType = 18; | |
971 } | |
972 } | |
973 else | |
974 { | |
975 pItems[v24].uEquipType = 17; | |
976 } | |
977 } | |
978 else | |
979 { | |
980 pItems[v24].uEquipType = 16; | |
981 } | |
982 } | |
983 else | |
984 { | |
985 pItems[v24].uEquipType = 15; | |
986 } | |
987 } | |
988 else | |
989 { | |
990 pItems[v24].uEquipType = 14; | |
991 } | |
992 } | |
993 else | |
994 { | |
995 pItems[v24].uEquipType = 13; | |
996 } | |
997 } | |
998 else | |
999 { | |
1000 pItems[v24].uEquipType = 12; | |
1001 } | |
1002 } | |
1003 else | |
1004 { | |
1005 pItems[v24].uEquipType = 11; | |
1006 } | |
1007 } | |
1008 else | |
1009 { | |
1010 pItems[v24].uEquipType = 10; | |
1011 } | |
1012 } | |
1013 else | |
1014 { | |
1015 pItems[v24].uEquipType = 9; | |
1016 } | |
1017 } | |
1018 else | |
1019 { | |
1020 pItems[v24].uEquipType = 8; | |
1021 } | |
1022 } | |
1023 else | |
1024 { | |
1025 pItems[v24].uEquipType = 7; | |
1026 } | |
1027 } | |
1028 else | |
1029 { | |
1030 pItems[v24].uEquipType = 6; | |
1031 } | |
1032 } | |
1033 else | |
1034 { | |
1035 pItems[v24].uEquipType = 5; | |
1036 } | |
1037 } | |
1038 else | |
1039 { | |
1040 pItems[v24].uEquipType = 4; | |
1041 } | |
1042 } | |
1043 else | |
1044 { | |
1045 pItems[v24].uEquipType = 3; | |
1046 } | |
1047 } | |
1048 else | |
1049 { | |
1050 pItems[v24].uEquipType = 2; | |
1051 } | |
1052 } | |
1053 else | |
1054 { | |
1055 LABEL_89: | |
1056 pItems[v24].uEquipType = 0; | |
1057 } | |
1058 } | |
1059 else | |
1060 { | |
1061 pItems[v24].uEquipType = 1; | |
1062 } | |
1063 break; | |
1064 case 5: | |
1065 if ( _strcmpi(v25, "staff") ) | |
1066 { | |
1067 if ( _strcmpi(v25, "sword") ) | |
1068 { | |
1069 if ( _strcmpi(v25, "dagger") ) | |
1070 { | |
1071 if ( _strcmpi(v25, "axe") ) | |
1072 { | |
1073 if ( _strcmpi(v25, "spear") ) | |
1074 { | |
1075 if ( _strcmpi(v25, "bow") ) | |
1076 { | |
1077 if ( _strcmpi(v25, "mace") ) | |
1078 { | |
1079 if ( _strcmpi(v25, "blaster") ) | |
1080 { | |
1081 if ( _strcmpi(v25, "shield") ) | |
1082 { | |
1083 if ( _strcmpi(v25, "leather") ) | |
1084 { | |
1085 if ( _strcmpi(v25, "chain") ) | |
1086 { | |
1087 if ( _strcmpi(v25, "plate") ) | |
1088 { | |
1089 if ( _strcmpi(v25, "club") ) | |
1090 pItems[v24].uSkillType = 38; | |
1091 else | |
1092 pItems[v24].uSkillType = 37; | |
1093 } | |
1094 else | |
1095 { | |
1096 pItems[v24].uSkillType = 11; | |
1097 } | |
1098 } | |
1099 else | |
1100 { | |
1101 pItems[v24].uSkillType = 10; | |
1102 } | |
1103 } | |
1104 else | |
1105 { | |
1106 pItems[v24].uSkillType = 9; | |
1107 } | |
1108 } | |
1109 else | |
1110 { | |
1111 pItems[v24].uSkillType = 8; | |
1112 } | |
1113 } | |
1114 else | |
1115 { | |
1116 pItems[v24].uSkillType = 7; | |
1117 } | |
1118 } | |
1119 else | |
1120 { | |
1121 pItems[v24].uSkillType = 6; | |
1122 } | |
1123 } | |
1124 else | |
1125 { | |
1126 pItems[v24].uSkillType = 5; | |
1127 } | |
1128 } | |
1129 else | |
1130 { | |
1131 pItems[v24].uSkillType = 4; | |
1132 } | |
1133 } | |
1134 else | |
1135 { | |
1136 pItems[v24].uSkillType = 3; | |
1137 } | |
1138 } | |
1139 else | |
1140 { | |
1141 pItems[v24].uSkillType = 2; | |
1142 } | |
1143 } | |
1144 else | |
1145 { | |
1146 pItems[v24].uSkillType = 1; | |
1147 } | |
1148 } | |
1149 else | |
1150 { | |
1151 pItems[v24].uSkillType = 0; | |
1152 } | |
1153 break; | |
1154 case 6: | |
1155 Stre = 0; | |
1156 v84 = strlen(v25); | |
1157 if ( (signed int)v84 > 0 ) | |
1158 { | |
1159 while ( tolower((unsigned __int8)v25[Stre]) != 'd' ) | |
1160 { | |
1161 ++Stre; | |
1162 if ( Stre >= (signed int)v84 ) | |
1163 goto LABEL_161; | |
1164 } | |
1165 v25[Stre] = 0; | |
1166 v28 = (char *)&pItems[v24]; | |
1167 v28[34] = atoi(v25); | |
1168 v28[35] = atoi(&v25[Stre + 1]); | |
1169 v25[Stre] = 'd'; | |
1170 } | |
1171 LABEL_161: | |
1172 if ( Stre == v84 && tolower((unsigned __int8)*v25) != 115 ) | |
1173 { | |
1174 v29 = (char *)&pItems[v24]; | |
1175 v29[34] = atoi(v25); | |
1176 v29[35] = 1; | |
1177 } | |
1178 break; | |
1179 case 7: | |
1180 pItems[v24].uDamageMod = atoi(v25); | |
1181 break; | |
1182 case 8: | |
1183 if ( _strcmpi(v25, "artifact") ) | |
1184 { | |
1185 if ( _strcmpi(v25, "relic") ) | |
1186 { | |
1187 if ( _strcmpi(v25, "special") ) | |
1188 pItems[v24].uMaterial = 0; | |
1189 else | |
1190 pItems[v24].uMaterial = 3; | |
1191 } | |
1192 else | |
1193 { | |
1194 pItems[v24].uMaterial = 2; | |
1195 } | |
1196 } | |
1197 else | |
1198 { | |
1199 pItems[v24].uMaterial = 1; | |
1200 } | |
1201 break; | |
1202 case 9: | |
1203 BYTE2(pItems[v24 + 1].uItemID) = atoi(v25); | |
1204 break; | |
1205 case 10: | |
1206 pItems[v24].pUnidentifiedName = (char *)RemoveQuotes(v25); | |
1207 break; | |
1208 case 11: | |
1209 pItems[v24].uSpriteID = atoi(v25); | |
1210 break; | |
1211 case 12: | |
1212 v30 = (char *)&pItems[v24]; | |
1213 v81 = v30; | |
1214 if ( v30[37] == 3 ) | |
1215 { | |
1216 v85 = 0; | |
222 | 1217 Strf = (const char **)&pEnchantments[0].pOfName; |
0 | 1218 while ( _strcmpi(*Strf, v25) ) |
1219 { | |
1220 ++v85; | |
1221 Strf += 5; | |
1222 if ( v85 >= 24 ) | |
1223 goto LABEL_181; | |
1224 } | |
1225 v81[39] = v85 + 1; | |
1226 LABEL_181: | |
1227 if ( !v81[39] ) | |
1228 { | |
1229 v86 = 0; | |
222 | 1230 Strg = (const char **)&pSpecialEnchantments[0].pNameAdd; |
0 | 1231 while ( _strcmpi(*Strg, v25) ) |
1232 { | |
1233 ++v86; | |
1234 Strg += 7; | |
1235 if ( v86 >= 72 ) | |
1236 goto LABEL_196; | |
1237 } | |
1238 v81[38] = v86 + 1; | |
1239 } | |
1240 } | |
1241 else | |
1242 { | |
1243 v30[38] = 0; | |
1244 v30[39] = 0; | |
1245 } | |
1246 break; | |
1247 case 13: | |
1248 v31 = (char *)&pItems[v24]; | |
1249 v82 = v31; | |
1250 if ( v31[37] == 3 && v31[39] ) | |
1251 { | |
1252 v32 = atoi(v25); | |
1253 v82[40] = v32; | |
1254 if ( !v32 ) | |
1255 v82[40] = 1; | |
1256 } | |
1257 else | |
1258 { | |
1259 v31[40] = 0; | |
1260 } | |
1261 break; | |
1262 case 14: | |
1263 pItems[v24].uEquipX = atoi(v25); | |
1264 break; | |
1265 case 15: | |
1266 pItems[v24].uEquipY = atoi(v25); | |
1267 break; | |
1268 case 16: | |
1269 pItems[v24].pDescription = (char *)RemoveQuotes(v25); | |
1270 break; | |
1271 default: | |
1272 break; | |
1273 } | |
1274 } | |
1275 LABEL_196: | |
1276 ++v100; | |
1277 v25 = (char *)(v75 + 1); | |
1278 if ( v100 <= 16 && !v91 ) | |
1279 continue; | |
1280 break; | |
1281 } | |
1282 ++v24; | |
1283 if ( v24 < 800 ) | |
1284 continue; | |
1285 break; | |
1286 } | |
222 | 1287 */ |
1288 | |
1289 pRndItemsTXT_Raw = NULL; | |
1290 uAllItemsCount = item_counter; | |
1291 pRndItemsTXT_Raw = (char *)pEvents_LOD->LoadRaw("rnditems.txt", 0); | |
1292 strtok(pRndItemsTXT_Raw, "\r"); | |
0 | 1293 strtok(0, "\r"); |
1294 strtok(0, "\r"); | |
1295 strtok(0, "\r"); | |
222 | 1296 |
1297 v35 = 0; | |
0 | 1298 do |
1299 { | |
1300 v101 = 0; | |
1301 v36 = strtok(0, "\r") + 1; | |
1302 v92 = 0; | |
1303 do | |
1304 { | |
1305 v37 = *v36; | |
1306 v38 = 0; | |
1307 while ( v37 != 9 && v37 ) | |
1308 { | |
1309 ++v38; | |
1310 v37 = v36[v38]; | |
1311 } | |
1312 v76 = (int)&v36[v38]; | |
1313 if ( !v36[v38] ) | |
1314 v92 = 1; | |
1315 *(unsigned char *)v76 = 0; | |
1316 if ( v38 ) | |
1317 { | |
1318 if ( v101 ) | |
1319 { | |
1320 switch ( v101 ) | |
1321 { | |
1322 case 2: | |
222 | 1323 // pItems[v35].field_2C = atoi(v36); |
0 | 1324 break; |
1325 case 3: | |
222 | 1326 // pItems[v35].field_2D = atoi(v36); |
0 | 1327 break; |
1328 case 4: | |
222 | 1329 // pItems[v35].field_2E = atoi(v36); |
0 | 1330 break; |
1331 case 5: | |
222 | 1332 // pItems[v35].field_2F = atoi(v36); |
0 | 1333 break; |
1334 case 6: | |
222 | 1335 //*((unsigned char *)&pItems[0].uItemID + 16 * (3 * v35 + 3)) = atoi(v36); |
0 | 1336 break; |
1337 case 7: | |
222 | 1338 // BYTE1(pItems[v35 + 1].uItemID) = atoi(v36); |
0 | 1339 break; |
1340 } | |
1341 } | |
1342 else | |
1343 { | |
1344 v35 = atoi(v36); | |
1345 } | |
1346 } | |
1347 else | |
1348 { | |
1349 if ( !v101 ) | |
1350 v92 = 1; | |
1351 } | |
1352 ++v101; | |
1353 v36 = (char *)(v76 + 1); | |
1354 } | |
1355 while ( v101 <= 7 && !v92 ); | |
1356 ++v35; | |
1357 } | |
1358 while ( v35 < 619 ); | |
222 | 1359 |
1360 | |
0 | 1361 if ( pRndItemsTXT_Raw ) |
1362 { | |
1363 pAllocator->FreeChunk(pRndItemsTXT_Raw); | |
1364 pRndItemsTXT_Raw = 0; | |
1365 } | |
1366 v39 = (char *)field_11684; | |
1367 memset(field_11684, 0, 0x18u); | |
1368 v40 = &pItems[0].field_2C; | |
1369 v77 = 6; | |
1370 do | |
1371 { | |
1372 v41 = v40; | |
1373 Strh = 800; | |
1374 do | |
1375 { | |
1376 *(unsigned int *)v39 += (unsigned __int8)*v41; | |
1377 v41 += 48; | |
1378 --Strh; | |
1379 } | |
1380 while ( Strh ); | |
1381 v39 += 4; | |
1382 ++v40; | |
1383 --v77; | |
1384 } | |
1385 while ( v77 ); | |
222 | 1386 |
0 | 1387 v42 = 0; |
1388 strtok(0, "\r"); | |
1389 strtok(0, "\r"); | |
1390 strtok(0, "\r"); | |
1391 strtok(0, "\r"); | |
1392 strtok(0, "\r"); | |
1393 v87 = 0; | |
1394 do | |
1395 { | |
1396 v43 = strtok(v42, "\r") + 1; | |
1397 v102 = (signed int)v42; | |
1398 v93 = (signed int)v42; | |
1399 do | |
1400 { | |
1401 v44 = *v43; | |
1402 v45 = 0; | |
1403 while ( v44 != 9 && v44 ) | |
1404 { | |
1405 ++v45; | |
1406 v44 = v43[v45]; | |
1407 } | |
1408 v78 = (int)&v43[v45]; | |
1409 if ( !v43[v45] ) | |
1410 v93 = 1; | |
1411 v42 = 0; | |
1412 *(unsigned char *)v78 = 0; | |
1413 if ( v45 ) | |
1414 { | |
1415 switch ( v102 ) | |
1416 { | |
1417 case 2: | |
1418 if ( v87 ) | |
1419 { | |
1420 if ( v87 == 1 ) | |
1421 { | |
1422 *(unsigned int *)&field_1169C[24] = atoi(v43); | |
1423 } | |
1424 else | |
1425 { | |
1426 if ( v87 == 2 ) | |
1427 *(unsigned int *)&field_1169C[48] = atoi(v43); | |
1428 } | |
1429 } | |
1430 else | |
1431 { | |
1432 *(unsigned int *)&field_1169C[0] = atoi(v43); | |
1433 } | |
1434 break; | |
1435 case 3: | |
1436 if ( v87 ) | |
1437 { | |
1438 if ( v87 == 1 ) | |
1439 { | |
1440 *(unsigned int *)&field_1169C[28] = atoi(v43); | |
1441 } | |
1442 else | |
1443 { | |
1444 if ( v87 == 2 ) | |
1445 *(unsigned int *)&field_1169C[52] = atoi(v43); | |
1446 } | |
1447 } | |
1448 else | |
1449 { | |
1450 *(unsigned int *)&field_1169C[4] = atoi(v43); | |
1451 } | |
1452 break; | |
1453 case 4: | |
1454 if ( v87 ) | |
1455 { | |
1456 if ( v87 == 1 ) | |
1457 { | |
1458 *(unsigned int *)&field_1169C[32] = atoi(v43); | |
1459 } | |
1460 else | |
1461 { | |
1462 if ( v87 == 2 ) | |
1463 *(unsigned int *)&field_1169C[56] = atoi(v43); | |
1464 } | |
1465 } | |
1466 else | |
1467 { | |
1468 *(unsigned int *)&field_1169C[8] = atoi(v43); | |
1469 } | |
1470 break; | |
1471 case 5: | |
1472 if ( v87 ) | |
1473 { | |
1474 if ( v87 == 1 ) | |
1475 { | |
1476 *(unsigned int *)&field_1169C[36] = atoi(v43); | |
1477 } | |
1478 else | |
1479 { | |
1480 if ( v87 == 2 ) | |
1481 field_116D8[0] = atoi(v43); | |
1482 } | |
1483 } | |
1484 else | |
1485 { | |
1486 *(unsigned int *)&field_1169C[12] = atoi(v43); | |
1487 } | |
1488 break; | |
1489 case 6: | |
1490 if ( v87 ) | |
1491 { | |
1492 if ( v87 == 1 ) | |
1493 { | |
1494 *(unsigned int *)&field_1169C[40] = atoi(v43); | |
1495 } | |
1496 else | |
1497 { | |
1498 if ( v87 == 2 ) | |
1499 field_116D8[1] = atoi(v43); | |
1500 } | |
1501 } | |
1502 else | |
1503 { | |
1504 *(unsigned int *)&field_1169C[16] = atoi(v43); | |
1505 } | |
1506 break; | |
1507 case 7: | |
1508 if ( v87 ) | |
1509 { | |
1510 if ( v87 == 1 ) | |
1511 { | |
1512 *(unsigned int *)&field_1169C[44] = atoi(v43); | |
1513 } | |
1514 else | |
1515 { | |
1516 if ( v87 == 2 ) | |
1517 field_116D8[2] = atoi(v43); | |
1518 } | |
1519 } | |
1520 else | |
1521 { | |
1522 *(unsigned int *)&field_1169C[20] = atoi(v43); | |
1523 } | |
1524 break; | |
1525 } | |
1526 } | |
1527 ++v102; | |
1528 v43 = (char *)(v78 + 1); | |
1529 } | |
1530 while ( v102 <= 7 && !v93 ); | |
1531 ++v87; | |
1532 } | |
1533 while ( v87 < 3 ); | |
222 | 1534 |
1535 | |
1536 | |
0 | 1537 pSkillDescTXT_Raw = 0; |
1538 pSkillDescTXT_Raw = (char *)pEvents_LOD->LoadRaw("skilldes.txt", 0); | |
1539 strtok(pSkillDescTXT_Raw, "\r"); | |
1540 v46 = 0; | |
1541 do | |
1542 { | |
1543 v103 = 0; | |
1544 v94 = 0; | |
1545 v47 = strtok(0, "\r") + 1; | |
1546 do | |
1547 { | |
1548 v48 = *v47; | |
1549 v49 = 0; | |
1550 while ( v48 != 9 && v48 ) | |
1551 { | |
1552 ++v49; | |
1553 v48 = v47[v49]; | |
1554 } | |
1555 v50 = (int)&v47[v49]; | |
1556 if ( !v47[v49] ) | |
1557 v94 = 1; | |
1558 *(unsigned char *)v50 = 0; | |
1559 if ( v49 ) | |
1560 { | |
1561 switch ( v103 ) | |
1562 { | |
1563 case 1: | |
1564 pSkillDesc[v46] = (char *)RemoveQuotes(v47); | |
1565 break; | |
1566 case 2: | |
1567 pNormalSkillDesc[v46] = (char *)RemoveQuotes(v47); | |
1568 break; | |
1569 case 3: | |
1570 pExpertSkillDesc[v46] = (char *)RemoveQuotes(v47); | |
1571 break; | |
1572 case 4: | |
1573 pMasterSkillDesc[v46] = (char *)RemoveQuotes(v47); | |
1574 break; | |
1575 case 5: | |
1576 pGrandSkillDesc[v46] = (char *)RemoveQuotes(v47); | |
1577 break; | |
1578 } | |
1579 } | |
1580 else | |
1581 { | |
1582 if ( !v103 ) | |
1583 v94 = 1; | |
1584 } | |
1585 ++v103; | |
1586 v47 = (char *)(v50 + 1); | |
1587 } | |
1588 while ( v103 <= 5 && !v94 ); | |
1589 ++v46; | |
1590 } | |
1591 while ( v46 < 37 ); | |
222 | 1592 |
1593 | |
0 | 1594 pStatsTXT_Raw = 0; |
1595 pStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("stats.txt", 0); | |
1596 strtok(pStatsTXT_Raw, "\r"); | |
1597 Stri = 0; | |
1598 do | |
1599 { | |
1600 v51 = 0; | |
1601 v95 = 0; | |
222 | 1602 v52 = strtok(0, pStatsTXT_Raw) + 1; |
0 | 1603 do |
1604 { | |
1605 v53 = *v52; | |
1606 v54 = 0; | |
1607 if ( *v52 != 9 ) | |
1608 { | |
1609 do | |
1610 { | |
1611 if ( !v53 ) | |
1612 break; | |
1613 ++v54; | |
1614 v53 = v52[v54]; | |
1615 } | |
1616 while ( v53 != 9 ); | |
1617 v34 = "\r"; | |
1618 } | |
1619 v55 = (int)&v52[v54]; | |
1620 if ( !v52[v54] ) | |
1621 v95 = 1; | |
1622 *(unsigned char *)v55 = 0; | |
1623 if ( v54 ) | |
1624 { | |
1625 if ( v51 ) | |
1626 { | |
1627 switch ( Stri ) | |
1628 { | |
1629 case 0: | |
1630 case 1: | |
1631 case 2: | |
1632 case 3: | |
1633 case 4: | |
1634 case 5: | |
1635 case 6: | |
1636 pAttributeDescriptions[Stri] = (char *)RemoveQuotes(v52); | |
1637 break; | |
1638 case 7: | |
1639 pHealthPointsAttributeDescription = (char *)RemoveQuotes(v52); | |
1640 break; | |
1641 case 8: | |
1642 pArmourClassAttributeDescription = (char *)RemoveQuotes(v52); | |
1643 break; | |
1644 case 9: | |
1645 pSpellPointsAttributeDescription = (char *)RemoveQuotes(v52); | |
1646 break; | |
1647 case 10: | |
1648 pPlayerConditionAttributeDescription = (char *)RemoveQuotes(v52); | |
1649 break; | |
1650 case 11: | |
1651 pFastSpellAttributeDescription = (char *)RemoveQuotes(v52); | |
1652 break; | |
1653 case 12: | |
1654 pPlayerAgeAttributeDescription = (char *)RemoveQuotes(v52); | |
1655 break; | |
1656 case 13: | |
1657 pPlayerLevelAttributeDescription = (char *)RemoveQuotes(v52); | |
1658 break; | |
1659 case 14: | |
1660 pPlayerExperienceAttributeDescription = (char *)RemoveQuotes(v52); | |
1661 break; | |
1662 case 15: | |
1663 pAttackBonusAttributeDescription = (char *)RemoveQuotes(v52); | |
1664 break; | |
1665 case 16: | |
1666 pAttackDamageAttributeDescription = (char *)RemoveQuotes(v52); | |
1667 break; | |
1668 case 17: | |
1669 pMissleBonusAttributeDescription = (char *)RemoveQuotes(v52); | |
1670 break; | |
1671 case 18: | |
1672 pMissleDamageAttributeDescription = (char *)RemoveQuotes(v52); | |
1673 break; | |
1674 case 19: | |
1675 pFireResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1676 break; | |
1677 case 20: | |
1678 pAirResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1679 break; | |
1680 case 21: | |
1681 pWaterResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1682 break; | |
1683 case 22: | |
1684 pEarthResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1685 break; | |
1686 case 23: | |
1687 pMindResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1688 break; | |
1689 case 24: | |
1690 pBodyResistanceAttributeDescription = (char *)RemoveQuotes(v52); | |
1691 break; | |
1692 case 25: | |
1693 pSkillPointsAttributeDescription = (char *)RemoveQuotes(v52); | |
1694 break; | |
1695 default: | |
1696 break; | |
1697 } | |
1698 } | |
1699 } | |
1700 else | |
1701 { | |
1702 if ( !v51 ) | |
1703 v95 = 1; | |
1704 } | |
1705 ++v51; | |
1706 v52 = (char *)(v55 + 1); | |
1707 } | |
1708 while ( v51 < 2 && !v95 ); | |
1709 ++Stri; | |
1710 } | |
1711 while ( Stri < 26 ); | |
222 | 1712 |
1713 | |
0 | 1714 pClassTXT_Raw = 0; |
1715 pClassTXT_Raw = (char *)pEvents_LOD->LoadRaw("class.txt", 0); | |
1716 strtok(pClassTXT_Raw, v34); | |
1717 Strj = pClassDescriptions; | |
1718 do | |
1719 { | |
1720 v56 = 0; | |
1721 v57 = strtok(0, v34) + 1; | |
1722 v96 = 0; | |
1723 do | |
1724 { | |
1725 v58 = *v57; | |
1726 v59 = 0; | |
1727 if ( *v57 != 9 ) | |
1728 { | |
1729 do | |
1730 { | |
1731 if ( !v58 ) | |
1732 break; | |
1733 ++v59; | |
1734 v58 = v57[v59]; | |
1735 } | |
1736 while ( v58 != 9 ); | |
1737 v34 = "\r"; | |
1738 } | |
1739 v60 = (int)&v57[v59]; | |
1740 if ( !v57[v59] ) | |
1741 v96 = 1; | |
1742 *(unsigned char *)v60 = 0; | |
1743 if ( v59 ) | |
1744 { | |
1745 if ( v56 ) | |
1746 *Strj = (char *)RemoveQuotes(v57); | |
1747 } | |
1748 else | |
1749 { | |
1750 if ( !v56 ) | |
1751 v96 = 1; | |
1752 } | |
1753 ++v56; | |
1754 v57 = (char *)(v60 + 1); | |
1755 } | |
1756 while ( v56 < 2 && !v96 ); | |
1757 ++Strj; | |
1758 } | |
1759 while ( (signed int)Strj <= (signed int)&pClassDescriptions[35] ); | |
1760 } | |
1761 | |
1762 //----- (00456D17) -------------------------------------------------------- | |
1763 void ItemsTable::SetSpecialBonus(ItemGen *pItem) | |
1764 { | |
1765 ItemDesc *v2; // eax@1 | |
1766 | |
1767 v2 = &this->pItems[pItem->uItemID]; | |
1768 if ( v2->uMaterial == 3 ) | |
1769 { | |
1770 pItem->_bonus_type = v2->_bonus_type; | |
1771 pItem->uAdditionalValue = v2->_additional_value; | |
1772 pItem->_bonus_strength = v2->_bonus_strength; | |
1773 } | |
1774 } | |
1775 | |
1776 //----- (00456D43) -------------------------------------------------------- | |
1777 bool ItemsTable::_456D43_is_material_equals_3(ItemGen *pItem) | |
1778 { | |
1779 return this->pItems[pItem->uItemID].uMaterial == 3; | |
1780 } | |
1781 | |
1782 //----- (00456D5E) -------------------------------------------------------- | |
1783 bool ItemsTable::_456D5E_is_some_material(ItemGen *pItem) | |
1784 { | |
1785 unsigned __int8 v2; // al@1 | |
1786 | |
1787 v2 = this->pItems[pItem->uItemID].uMaterial; | |
1788 return v2 == 3 || v2 == 1 || v2 == 2; | |
1789 } | |
1790 | |
1791 | |
1792 //----- (00453B3C) -------------------------------------------------------- | |
1793 void ItemsTable::LoadPotions() | |
222 | 1794 { |
0 | 1795 |
222 | 1796 CHAR Text[90]; // [sp+Ch] [bp-6Ch]@26 |
1797 char* test_string; | |
1798 unsigned int uRow; | |
1799 unsigned int uColumn; | |
1800 unsigned __int8 potion_value; | |
1801 | |
1802 if ( pPotionsTXT_Raw ) | |
1803 pAllocator->FreeChunk(pPotionsTXT_Raw); | |
1804 pPotionsTXT_Raw = NULL; | |
1805 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
|
1806 test_string = strtok(pPotionsTXT_Raw,"\t\r\n"); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1807 while ( 1 ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1808 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1809 if ( !test_string ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1810 { |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1811 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
|
1812 return; |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1813 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1814 if ( !strcmp(test_string, "222") ) |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1815 break; |
222 | 1816 |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1817 test_string = strtok(NULL, "\t\r\n"); |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1818 } |
222 | 1819 while ( 1 ) |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1820 { |
222 | 1821 test_string = strtok(NULL, "\t\r\n"); |
1822 | |
1823 if ( !test_string ) | |
1824 { | |
1825 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); | |
1826 return; | |
1827 } | |
1828 if ( !strcmp(test_string, "222") ) | |
1829 break; | |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1830 } |
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1831 |
222 | 1832 for (uRow = 0;uRow < 50; ++uRow) |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1833 { |
222 | 1834 int skip_count; |
1835 for (skip_count = 0;skip_count < 6; ++skip_count) | |
1836 { | |
1837 if ( !strtok(NULL, "\r\t\n") ) | |
1838 break; | |
1839 } | |
1840 if ( skip_count != 6 ) | |
1841 break; | |
1842 for (uColumn = 0; uColumn < 50; ++uColumn) | |
1843 { | |
1844 test_string = strtok(NULL, "\r\t\n"); | |
1845 if ( !test_string ) | |
1846 break; | |
1847 potion_value = atoi(test_string); | |
1848 char c=*test_string; | |
1849 if ( !potion_value ) | |
1850 { | |
1851 if ( tolower(c) == 'e' ) | |
1852 potion_value = atoi(test_string + 1); | |
1853 else | |
1854 potion_value = 0; | |
1855 } | |
1856 this->potion_data[uRow][uColumn]=potion_value; | |
1857 } | |
1858 if ( uColumn != 50 ) | |
1859 break; | |
1860 strtok(NULL, "\r\t\n"); | |
1861 } | |
193
821fd955c379
fixed potion data parsing. Somehow 3d render was affected
Gloval
parents:
189
diff
changeset
|
1862 |
222 | 1863 if ( uRow != 50 ) |
1864 { | |
1865 wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn); | |
1866 MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); | |
1867 } | |
1868 if ( pPotionsTXT_Raw ) | |
1869 { | |
1870 pAllocator->FreeChunk(pPotionsTXT_Raw); | |
1871 pPotionsTXT_Raw = 0; | |
1872 } | |
1873 } | |
0 | 1874 |
1875 //----- (00453CE5) -------------------------------------------------------- | |
1876 void ItemsTable::LoadPotionNotes() | |
222 | 1877 { |
1878 | |
1879 CHAR Text[90]; | |
1880 char* test_string; | |
1881 unsigned int uRow; | |
1882 unsigned int uColumn; | |
1883 unsigned __int8 potion_note; | |
1884 | |
1885 if ( pPotionNotesTXT_Raw ) | |
1886 pAllocator->FreeChunk(pPotionNotesTXT_Raw); | |
1887 pPotionNotesTXT_Raw = NULL; | |
1888 pPotionNotesTXT_Raw = (char *)pEvents_LOD->LoadRaw("potnotes.txt", 0); | |
1889 test_string = strtok(pPotionNotesTXT_Raw ,"\t\r\n"); | |
1890 while ( 1 ) | |
1891 { | |
1892 if ( !test_string ) | |
1893 { | |
1894 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); | |
1895 return; | |
1896 } | |
1897 if ( !strcmp(test_string, "222") ) | |
1898 break; | |
1899 test_string = strtok(NULL, "\t\r\n"); | |
1900 } | |
1901 while ( 1 ) | |
1902 { | |
1903 test_string = strtok(NULL, "\t\r\n"); | |
1904 | |
1905 if ( !test_string ) | |
1906 { | |
1907 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); | |
1908 return; | |
1909 } | |
1910 if ( !strcmp(test_string, "222") ) | |
1911 break; | |
1912 } | |
0 | 1913 |
222 | 1914 for (uRow = 0;uRow < 50; ++uRow) |
1915 { | |
1916 int skip_count; | |
1917 for (skip_count = 0;skip_count < 6; ++skip_count) | |
1918 { | |
1919 if ( !strtok(NULL, "\r\t\n") ) | |
1920 break; | |
1921 } | |
1922 if ( skip_count != 6 ) | |
1923 break; | |
1924 for (uColumn = 0; uColumn < 50; ++uColumn) | |
1925 { | |
1926 test_string = strtok(NULL, "\r\t\n"); | |
1927 if ( !test_string ) | |
1928 break; | |
1929 potion_note = atoi(test_string); | |
1930 char c=*test_string; | |
1931 if ( !potion_note ) | |
1932 { | |
1933 if ( tolower(c) == 'e' ) | |
1934 potion_note = atoi(test_string + 1); | |
1935 else | |
1936 potion_note = 0; | |
1937 } | |
1938 this->potion_note[uRow][uColumn]=potion_note; | |
1939 } | |
1940 if ( uColumn != 50 ) | |
1941 break; | |
1942 strtok(NULL, "\r\t\n"); | |
1943 } | |
1944 if ( uRow != 50 ) | |
1945 { | |
1946 wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn); | |
1947 MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); | |
1948 } | |
1949 } | |
0 | 1950 |
1951 | |
1952 //----- (00456442) -------------------------------------------------------- | |
1953 unsigned int ItemGen::GetValue() | |
1954 { | |
1955 ItemGen *v1; // esi@1 | |
1956 unsigned int uBaseValue; // edi@1 | |
1957 int v3; // eax@4 | |
1958 int v4; // esi@5 | |
1959 unsigned int result; // eax@7 | |
1960 | |
1961 v1 = this; | |
1962 uBaseValue = pItemsTable->pItems[this->uItemID].uValue; | |
1963 if ( this->uAttributes & ITEM_TEMP_BONUS || pItemsTable->_456D5E_is_some_material(this) ) | |
1964 goto LABEL_12; | |
1965 if ( v1->_bonus_type ) | |
1966 { | |
1967 v3 = 100 * v1->_bonus_strength; | |
1968 return uBaseValue + v3; | |
1969 } | |
1970 v4 = v1->uAdditionalValue; | |
1971 if ( !v4 ) | |
1972 { | |
1973 LABEL_12: | |
1974 result = uBaseValue; | |
1975 } | |
1976 else | |
1977 { | |
222 | 1978 v3 = *(unsigned int *)&pItemsTable->pEnchantments[23].to_item[28 * v4 + 8]; |
0 | 1979 if ( (unsigned int)v3 > 0xA ) |
1980 return uBaseValue + v3; | |
1981 result = uBaseValue * v3; | |
1982 } | |
1983 return result; | |
1984 } | |
1985 | |
1986 //----- (00456499) -------------------------------------------------------- | |
1987 const char *ItemGen::GetDisplayName() | |
1988 { | |
1989 const char *result; // eax@2 | |
1990 | |
1991 if ( this->uAttributes & ITEM_IDENTIFIED ) | |
1992 result = GetIdentifiedName(); | |
1993 else | |
1994 result = pItemsTable->pItems[uItemID].pUnidentifiedName; | |
1995 return result; | |
1996 } | |
1997 | |
1998 //----- (004564B3) -------------------------------------------------------- | |
1999 const char *ItemGen::GetIdentifiedName() | |
2000 { | |
2001 ItemGen *v1; // esi@1 | |
2002 unsigned int v2; // eax@1 | |
2003 unsigned __int8 v3; // cl@1 | |
2004 char *v4; // edi@4 | |
2005 char v5; // al@6 | |
2006 const char *v6; // esi@8 | |
2007 int v7; // eax@15 | |
2008 const char *v9; // [sp-Ch] [bp-14h]@14 | |
2009 const char *v10; // [sp-8h] [bp-10h]@4 | |
2010 char *v11; // [sp-4h] [bp-Ch]@4 | |
2011 | |
2012 v1 = this; | |
2013 v2 = this->uItemID; | |
2014 v3 = pItemsTable->pItems[v2].uEquipType; | |
2015 if ( v3 >= EQUIP_REAGENT && (v3 <= EQUIP_POTION || v3 == EQUIP_GOLD) ) | |
2016 { | |
2017 v11 = pItemsTable->pItems[v2].pName; | |
2018 v4 = item__getname_buffer; | |
2019 v10 = "%s"; | |
2020 LABEL_10: | |
2021 sprintf(v4, v10, v11); | |
2022 return v4; | |
2023 } | |
2024 v4 = item__getname_buffer; | |
2025 sprintf(item__getname_buffer, "%s", pItemsTable->pItems[v2].pName); | |
2026 if ( v1->uItemID == 601 ) | |
2027 { | |
2028 v5 = v1->field_1A; | |
2029 if ( (unsigned __int8)v5 >= 1u ) | |
2030 { | |
2031 if ( (unsigned __int8)v5 <= 4u ) | |
2032 { | |
2033 v6 = pPlayers[(unsigned __int8)v5]->pName; | |
2034 strlen(pPlayers[(unsigned __int8)v5]->pName); | |
2035 v11 = (char *)v6; | |
2036 if ( v6[strlen(v6) - 1] == 115 ) | |
2037 v10 = pGlobalTXT_LocalizationStrings[655]; | |
2038 else | |
2039 v10 = pGlobalTXT_LocalizationStrings[654]; | |
2040 goto LABEL_10; | |
2041 } | |
2042 } | |
2043 } | |
2044 if ( !pItemsTable->_456D5E_is_some_material(v1) ) | |
2045 { | |
2046 if ( v1->_bonus_type ) | |
2047 { | |
2048 strcat(item__getname_buffer, " "); | |
2049 v9 = (const char *)*((unsigned int *)&pItemsTable->pItems[799].uEquipType + 5 * v1->_bonus_type); | |
2050 } | |
2051 else | |
2052 { | |
2053 v7 = v1->uAdditionalValue; | |
2054 if ( !v7 ) | |
2055 return v4; | |
2056 if ( v7 == 16 | |
2057 || v7 == 39 | |
2058 || v7 == 40 | |
2059 || v7 == 45 | |
2060 || v7 == 56 | |
2061 || v7 == 57 | |
2062 || v7 == 58 | |
2063 || v7 == 60 | |
2064 || v7 == 61 | |
2065 || v7 == 59 | |
2066 || v7 == 63 | |
2067 || v7 == 64 | |
2068 || v7 == 67 | |
2069 || v7 == 68 ) | |
2070 { | |
2071 sprintf( | |
2072 item__getname_buffer, | |
2073 "%s %s", | |
222 | 2074 *(unsigned int *)&pItemsTable->pEnchantments[22].to_item[28 * v7 + 8], |
0 | 2075 pItemsTable->pItems[v1->uItemID].pName); |
2076 return v4; | |
2077 } | |
2078 strcat(item__getname_buffer, " "); | |
222 | 2079 v9 = *(const char **)&pItemsTable->pEnchantments[22].to_item[28 * v1->uAdditionalValue + 8]; |
0 | 2080 } |
2081 strcat(item__getname_buffer, v9); | |
2082 } | |
2083 return v4; | |
2084 } | |
2085 | |
2086 | |
2087 //----- (00456620) -------------------------------------------------------- | |
2088 void ItemsTable::GenerateItem(int a2, int a3, ItemGen *pItem) | |
2089 { | |
2090 ItemGen *v4; // esi@1 | |
2091 ItemsTable *v5; // edi@1 | |
2092 int v6; // ebx@3 | |
2093 int *v7; // ecx@33 | |
2094 int v8; // eax@34 | |
2095 int v9; // eax@39 | |
2096 int v10; // ebx@43 | |
2097 int v11; // ecx@47 | |
2098 unsigned int *v12; // edx@48 | |
2099 unsigned int v13; // eax@49 | |
2100 signed int v14; // ebx@52 | |
2101 int v15; // eax@53 | |
2102 signed int v16; // eax@55 | |
2103 int v17; // ebx@57 | |
2104 int v18; // edx@62 | |
2105 signed int v19; // ebx@70 | |
2106 unsigned __int8 v20; // al@81 | |
2107 int v21; // eax@84 | |
2108 int v22; // ebx@85 | |
2109 int v23; // eax@86 | |
2110 int v24; // ebx@86 | |
2111 int v25; // edx@86 | |
2112 int v26; // edx@89 | |
2113 unsigned int v27; // eax@89 | |
2114 int i; // ebx@89 | |
2115 unsigned int v29; // ecx@90 | |
2116 int v30; // ebx@91 | |
2117 int v31; // eax@91 | |
2118 int v32; // ecx@91 | |
2119 int v33; // eax@91 | |
2120 int v34; // eax@97 | |
2121 unsigned __int8 v35; // sf@97 | |
2122 unsigned __int8 v36; // of@97 | |
2123 int v37; // ebx@98 | |
2124 int v38; // edx@99 | |
2125 signed int v39; // ebx@101 | |
2126 int v40; // ecx@102 | |
2127 char v41; // zf@107 | |
2128 char v42; // al@108 | |
2129 char v43; // al@111 | |
2130 int *v44; // edx@118 | |
2131 int v45; // eax@120 | |
2132 int v46; // edx@120 | |
2133 int *j; // eax@121 | |
2134 unsigned int v48; // ecx@123 | |
2135 int v49; // eax@123 | |
2136 int v50; // eax@123 | |
2137 unsigned char Dst[0xC80]; // [sp+Ch] [bp-C88h]@33 | |
2138 int v52; // [sp+C8Ch] [bp-8h]@33 | |
2139 int v53; // [sp+C90h] [bp-4h]@1 | |
2140 int v54; // [sp+C9Ch] [bp+8h]@3 | |
2141 int v55; // [sp+CA0h] [bp+Ch]@34 | |
2142 signed int v56; // [sp+CA0h] [bp+Ch]@55 | |
2143 int v57; // [sp+CA0h] [bp+Ch]@62 | |
2144 int *v58; // [sp+CA0h] [bp+Ch]@102 | |
2145 int v59; // [sp+CA0h] [bp+Ch]@123 | |
2146 signed int a2a; // [sp+CA4h] [bp+10h]@33 | |
2147 int a2b; // [sp+CA4h] [bp+10h]@101 | |
2148 int a2c; // [sp+CA4h] [bp+10h]@120 | |
2149 | |
2150 v53 = -1; | |
2151 v4 = pItem; | |
2152 v5 = this; | |
2153 if ( !pItem ) | |
2154 v4 = (ItemGen *)pAllocator->AllocNamedChunk(pItem, 0x24u, "newItemGen"); | |
2155 memset(v4, 0, 0x24u); | |
2156 v6 = a2 - 1; | |
2157 v54 = a2 - 1; | |
2158 if ( a3 ) | |
2159 { | |
2160 switch ( a3 ) | |
2161 { | |
2162 case 20: | |
2163 a3 = EQUIP_ONE_OR_TWO_HANDS; | |
2164 break; | |
2165 case 21: | |
2166 a3 = 3; | |
2167 break; | |
2168 case 22: | |
2169 v53 = 38; | |
2170 break; | |
2171 case 23: | |
2172 v53 = 1; | |
2173 break; | |
2174 case 24: | |
2175 v53 = 2; | |
2176 break; | |
2177 case 25: | |
2178 v53 = 3; | |
2179 break; | |
2180 case 26: | |
2181 v53 = 4; | |
2182 break; | |
2183 case 27: | |
2184 v53 = 5; | |
2185 break; | |
2186 case 28: | |
2187 v53 = 6; | |
2188 break; | |
2189 case 30: | |
2190 v53 = 0; | |
2191 break; | |
2192 case 31: | |
2193 v53 = 9; | |
2194 break; | |
2195 case 32: | |
2196 v53 = 10; | |
2197 break; | |
2198 case 33: | |
2199 v53 = 0xBu; | |
2200 break; | |
2201 case 34: | |
2202 a3 = 4; | |
2203 break; | |
2204 case 35: | |
2205 a3 = 5; | |
2206 break; | |
2207 case 36: | |
2208 a3 = 6; | |
2209 break; | |
2210 case 37: | |
2211 a3 = 7; | |
2212 break; | |
2213 case 38: | |
2214 a3 = 8; | |
2215 break; | |
2216 case 39: | |
2217 a3 = EQUIP_BOOTS; | |
2218 break; | |
2219 case 40: | |
2220 a3 = EQUIP_RING; | |
2221 break; | |
2222 case 41: | |
2223 a3 = 0xBu; | |
2224 break; | |
2225 case 42: | |
2226 a3 = EQUIP_C; | |
2227 break; | |
2228 case 43: | |
2229 a3 = EQUIP_F; | |
2230 break; | |
2231 case 44: | |
2232 a3 = EQUIP_POTION; | |
2233 break; | |
2234 case 45: | |
2235 a3 = EQUIP_REAGENT; | |
2236 break; | |
2237 case 46: | |
2238 a3 = EQUIP_GEM; | |
2239 break; | |
2240 case 29: | |
2241 v53 = 37; | |
2242 break; | |
2243 default: | |
2244 --a3; | |
2245 break; | |
2246 } | |
2247 memset(&Dst, 0, 0xC80u); | |
2248 v52 = 0; | |
2249 v7 = (int *)&Dst; | |
2250 a2a = 1; | |
2251 if ( v53 == -1 ) | |
2252 { | |
2253 v53 = (int)&v5->pItems[1].uEquipType; | |
2254 v9 = (int)(&v5->pItems[1].field_2C + v6); | |
2255 do | |
2256 { | |
2257 if ( *(unsigned char *)v53 == a3 ) | |
2258 { | |
2259 *v7 = a2a; | |
2260 ++v7; | |
2261 v52 += *(unsigned char *)v9; | |
2262 } | |
2263 ++a2a; | |
2264 v53 += 48; | |
2265 v9 += 48; | |
2266 } | |
2267 while ( a2a < 500 ); | |
2268 } | |
2269 else | |
2270 { | |
2271 v55 = (int)&v5->pItems[1].uSkillType; | |
2272 v8 = (int)(&v5->pItems[1].field_2C + v6); | |
2273 do | |
2274 { | |
2275 if ( *(unsigned char *)v55 == v53 ) | |
2276 { | |
2277 *v7 = a2a; | |
2278 ++v7; | |
2279 v52 += *(unsigned char *)v8; | |
2280 } | |
2281 ++a2a; | |
2282 v55 += 48; | |
2283 v8 += 48; | |
2284 } | |
2285 while ( a2a < 500 ); | |
2286 } | |
2287 v10 = 0; | |
2288 if ( v52 ) | |
2289 v10 = rand() % v52; | |
2290 v4->uItemID = *(uint *)Dst; | |
2291 if ( !Dst ) | |
2292 v4->uItemID = 1; | |
2293 v11 = *(&v5->pItems[v4->uItemID].field_2C + v54); | |
2294 if ( v11 < v10 ) | |
2295 { | |
2296 v12 = (uint *)Dst; | |
2297 do | |
2298 { | |
2299 ++v12; | |
2300 v13 = *v12; | |
2301 v4->uItemID = *v12; | |
2302 v11 += *(&v5->pItems[v13].field_2C + v54); | |
2303 } | |
2304 while ( v11 < v10 ); | |
2305 } | |
2306 if ( v5->pItems[v4->uItemID].uEquipType == EQUIP_POTION && v4->uItemID != ITEM_POTION_BOTTLE ) | |
2307 { | |
2308 v4->_bonus_type = 0; | |
2309 v14 = 2; | |
2310 do | |
2311 { | |
2312 v4->_bonus_type += rand() % 4 + 1; | |
2313 v15 = v4->_bonus_type; | |
2314 --v14; | |
2315 } | |
2316 while ( v14 ); | |
2317 LABEL_72: | |
2318 v4->_bonus_type = v15 * (v54 + 1); | |
2319 goto LABEL_73; | |
2320 } | |
2321 } | |
2322 else | |
2323 { | |
2324 v16 = 0; | |
2325 v56 = 0; | |
2326 do | |
2327 v56 += pParty->field_7BA[v16++]; | |
2328 while ( v16 < 29 ); | |
2329 v17 = rand() % 29; | |
2330 if ( v54 == 5 && rand() % 100 < 5 && !pParty->field_7BA[v17] && v56 < 13 ) | |
2331 { | |
2332 pParty->field_7BA[v17] = 1; | |
2333 v4->uAttributes = 0; | |
2334 v4->uItemID = v17 + 500; | |
2335 v5->SetSpecialBonus(v4); | |
2336 return; | |
2337 } | |
2338 v57 = 0; | |
2339 v18 = rand() % v5->field_11684[v54]; | |
2340 v4->uItemID = 0; | |
2341 if ( v18 > 0 ) | |
2342 { | |
2343 do | |
2344 v57 += *(&v5->pItems[v4->uItemID++ + 1].field_2C + v54); | |
2345 while ( v57 < v18 ); | |
2346 } | |
2347 if ( !v18 ) | |
2348 v4->uItemID = 1; | |
2349 if ( !v4->uItemID ) | |
2350 v4->uItemID = 1; | |
2351 if ( v5->pItems[v4->uItemID].uEquipType == EQUIP_POTION && v4->uItemID != ITEM_POTION_BOTTLE ) | |
2352 { | |
2353 v4->_bonus_type = 0; | |
2354 v19 = 2; | |
2355 do | |
2356 { | |
2357 v4->_bonus_type += rand() % 4 + 1; | |
2358 v15 = v4->_bonus_type; | |
2359 --v19; | |
2360 } | |
2361 while ( v19 ); | |
2362 goto LABEL_72; | |
2363 } | |
2364 } | |
2365 LABEL_73: | |
2366 if ( v4->uItemID == ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION | |
2367 && !(unsigned __int16)_449B57_test_bit(pParty->_award_bits, 239) ) | |
2368 v4->uItemID = ITEM_SPELLBOOK_LIGHT_SUN_BURST; | |
222 | 2369 if ( pItemsTable->pItems[v4->uItemID + 1].uItemID_Rep_St ) |
0 | 2370 v4->uAttributes = 0; |
2371 else | |
2372 v4->uAttributes = 1; | |
2373 if ( v5->pItems[v4->uItemID].uEquipType != EQUIP_POTION ) | |
2374 { | |
2375 v4->uAdditionalValue = 0; | |
2376 v4->_bonus_type = 0; | |
2377 } | |
2378 v20 = v5->pItems[v4->uItemID].uEquipType; | |
2379 if ( v20 <= EQUIP_BOW ) | |
2380 { | |
2381 v37 = (int)&v5->field_1169C[4 * v54 + 48]; | |
2382 if ( !*(unsigned int *)v37 ) | |
2383 return; | |
2384 v38 = rand() % 100; | |
2385 v36 = __OFSUB__(v38, *(unsigned int *)v37); | |
2386 v35 = v38 - *(unsigned int *)v37 < 0; | |
2387 } | |
2388 else | |
2389 { | |
2390 if ( v20 > EQUIP_AMULET ) | |
2391 { | |
2392 if ( v20 == EQUIP_C ) | |
2393 { | |
2394 v21 = rand() % 6 + pItemsTable->pItems[v4->uItemID].uDamageMod + 1; | |
2395 v4->uNumCharges = v21; | |
2396 v4->uMaxCharges = v21; | |
2397 } | |
2398 return; | |
2399 } | |
2400 v22 = (int)&v5->field_1169C[4 * v54]; | |
2401 if ( !*(unsigned int *)v22 ) | |
2402 return; | |
2403 v23 = rand(); | |
2404 v24 = *(unsigned int *)v22; | |
2405 v25 = v23 % 100; | |
2406 if ( v23 % 100 < v24 ) | |
2407 goto LABEL_127; | |
2408 if ( !*(unsigned int *)&v5->field_1169C[4 * v54 + 24] ) | |
2409 return; | |
2410 if ( v25 < v24 ) | |
2411 { | |
2412 LABEL_127: | |
2413 v26 = rand() % v5->field_116D8[v5->pItems[v4->uItemID].uEquipType]; | |
2414 v27 = v4->uItemID; | |
2415 v4->_bonus_type = 0; | |
222 | 2416 for ( i = v5->pEnchantments[0].to_item[v5->pItems[v27].uEquipType + 1]; |
0 | 2417 i < v26; |
222 | 2418 i += v5->pEnchantments[v4->_bonus_type].to_item[v5->pItems[v29].uEquipType + 1] ) |
0 | 2419 { |
2420 v29 = v4->uItemID; | |
2421 ++v4->_bonus_type; | |
2422 } | |
2423 ++v4->_bonus_type; | |
2424 v30 = v5->field_116D8[2 * v54 + 12]; | |
2425 v31 = rand(); | |
2426 v32 = v4->_bonus_type - 1; | |
2427 v33 = v31 % (v5->field_116D8[2 * v54 + 13] - v30 + 1) + v30; | |
2428 v4->_bonus_strength = v33; | |
2429 if ( v32 == 21 || v32 == 22 || v32 == 23 ) | |
2430 v4->_bonus_strength = v33 >> 1; | |
2431 if ( v4->_bonus_strength <= 0 ) | |
2432 v4->_bonus_strength = 1; | |
2433 return; | |
2434 } | |
2435 v34 = v24 + *(unsigned int *)&v5->field_1169C[4 * v54 + 24]; | |
2436 v36 = __OFSUB__(v25, v34); | |
2437 v35 = v25 - v34 < 0; | |
2438 } | |
2439 if ( !(v35 ^ v36) ) | |
2440 return; | |
2441 memset(&Dst, 0, 0xC80u); | |
2442 v39 = 0; | |
2443 a2b = 0; | |
222 | 2444 if ( v5->pSpecialEnchantments_count > 0 ) |
0 | 2445 { |
2446 v52 = -16 - (uint)v5; | |
2447 v58 = (int *)&Dst; | |
2448 v40 = (int)&v5->pSpecialEnchantments[1]; | |
2449 do | |
2450 { | |
2451 switch ( v54 ) | |
2452 { | |
2453 case 2: | |
2454 if ( !*(unsigned char *)v40 ) | |
2455 goto LABEL_117; | |
2456 v41 = *(unsigned char *)v40 == 1; | |
2457 break; | |
2458 case 3: | |
2459 v43 = *(unsigned char *)v40; | |
2460 if ( !*(unsigned char *)v40 || v43 == 1 ) | |
2461 { | |
2462 LABEL_117: | |
222 | 2463 v39 += *((unsigned char *)&v5->uAllItemsCount + v40 + v52 + v5->pItems[v4->uItemID].uEquipType); |
2464 if ( *((unsigned char *)&v5->uAllItemsCount + v40 + v52 + v5->pItems[v4->uItemID].uEquipType) ) | |
0 | 2465 { |
2466 v44 = v58; | |
2467 ++v58; | |
2468 *v44 = a2b; | |
2469 } | |
2470 goto LABEL_119; | |
2471 } | |
2472 v41 = v43 == 2; | |
2473 break; | |
2474 case 4: | |
2475 v42 = *(unsigned char *)v40; | |
2476 if ( *(unsigned char *)v40 == 1 || v42 == 2 ) | |
2477 goto LABEL_117; | |
2478 v41 = v42 == 3; | |
2479 break; | |
2480 default: | |
2481 if ( v54 != 5 ) | |
2482 goto LABEL_119; | |
2483 v41 = *(unsigned char *)v40 == 3; | |
2484 break; | |
2485 } | |
2486 if ( v41 ) | |
2487 goto LABEL_117; | |
2488 LABEL_119: | |
2489 ++a2b; | |
2490 v40 += 28; | |
2491 } | |
222 | 2492 while ( a2b < v5->pSpecialEnchantments_count ); |
0 | 2493 } |
2494 v45 = rand(); | |
2495 v4->uAdditionalValue = *(uint *)Dst; | |
2496 v46 = v45 % v39 + 1; | |
222 | 2497 a2c = *((unsigned char *)&v5->uAllItemsCount + 28 * (*(uint *)Dst + 1389) + v5->pItems[v4->uItemID].uEquipType); |
0 | 2498 if ( a2c < v46 ) |
2499 { | |
2500 for ( j = (int *)&Dst; ; j = (int *)v59 ) | |
2501 { | |
2502 v48 = v4->uItemID; | |
2503 v49 = (int)(j + 1); | |
2504 v59 = v49; | |
2505 v50 = *(unsigned int *)v49; | |
2506 v4->uAdditionalValue = v50; | |
222 | 2507 a2c += *((unsigned char *)&v5->uAllItemsCount + 28 * (v50 + 1389) + v5->pItems[v48].uEquipType); |
0 | 2508 if ( a2c >= v46 ) |
2509 break; | |
2510 } | |
2511 } | |
2512 ++v4->uAdditionalValue; | |
2513 } | |
2514 | |
2515 //----- (004505CC) -------------------------------------------------------- | |
2516 bool ItemGen::GenerateArtifact() | |
2517 { | |
2518 ItemGen *v1; // edi@1 | |
2519 signed int uNumArtifactsNotFound; // esi@1 | |
2520 int v3; // eax@1 | |
2521 bool result; // eax@6 | |
2522 int v5[32]; // [sp+8h] [bp-A0h]@3 | |
2523 char Dst[32]; // [sp+88h] [bp-20h]@1 | |
2524 | |
2525 auto a2 = this; | |
2526 v1 = a2; | |
2527 memset(Dst, 0, 0x20u); | |
2528 uNumArtifactsNotFound = 0; | |
2529 v3 = 500; | |
2530 do | |
2531 { | |
2532 if ( !pParty->field_3C.pIsArtifactFound[v3] ) | |
2533 v5[uNumArtifactsNotFound++] = v3; | |
2534 ++v3; | |
2535 } | |
2536 while ( v3 < 529 ); | |
2537 v1->Reset(); | |
2538 if ( uNumArtifactsNotFound ) | |
2539 { | |
2540 v1->uItemID = v5[rand() % uNumArtifactsNotFound]; | |
2541 pItemsTable->SetSpecialBonus(v1); | |
2542 result = 1; | |
2543 } | |
2544 else | |
2545 { | |
2546 result = 0; | |
2547 } | |
2548 return result; | |
2549 } | |
2550 // 4505CC: using guessed type int var_A0[32]; |