comparison Items.cpp @ 222:8113753ed2ae

more item init fixing
author Gloval
date Sun, 17 Feb 2013 11:29:10 +0400
parents 821fd955c379
children 1bd823f52e3a
comparison
equal deleted inserted replaced
193:821fd955c379 222:8113753ed2ae
246 char *v2; // eax@1 246 char *v2; // eax@1
247 char *v3; // eax@2 247 char *v3; // eax@2
248 char v4; // cl@3 248 char v4; // cl@3
249 int v5; // esi@3 249 int v5; // esi@3
250 char *v6; // esi@21 250 char *v6; // esi@21
251 char *v7; // eax@21 251 unsigned char *v7; // eax@21
252 char *v8; // ecx@22 252 unsigned char *v8; // ecx@22
253 char *v9; // eax@26 253 char *v9; // eax@26
254 char v10; // dl@27 254 char v10; // dl@27
255 int v11; // ecx@27 255 int v11; // ecx@27
256 int v12; // esi@31 256 int v12; // esi@31
257 char *v13; // eax@39 257 char *v13; // eax@39
343 signed int v99; // [sp+20h] [bp-4h]@40 343 signed int v99; // [sp+20h] [bp-4h]@40
344 signed int v100; // [sp+20h] [bp-4h]@72 344 signed int v100; // [sp+20h] [bp-4h]@72
345 signed int v101; // [sp+20h] [bp-4h]@200 345 signed int v101; // [sp+20h] [bp-4h]@200
346 signed int v102; // [sp+20h] [bp-4h]@234 346 signed int v102; // [sp+20h] [bp-4h]@234
347 signed int v103; // [sp+20h] [bp-4h]@288 347 signed int v103; // [sp+20h] [bp-4h]@288
348 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;
349 //v1 = this; 356 //v1 = this;
350 357
351 pMapStats = new MapStats; 358 pMapStats = new MapStats;
352 pMapStats->Initialize(); 359 pMapStats->Initialize();
353 360
366 373
367 pStorylineText = new StorylineText; 374 pStorylineText = new StorylineText;
368 pStorylineText->Initialize(); 375 pStorylineText->Initialize();
369 376
370 pStdItemsTXT_Raw = 0; 377 pStdItemsTXT_Raw = 0;
371 v2 = (char *)pEvents_LOD->LoadRaw("stditems.txt", 0); 378 pStdItemsTXT_Raw = (char *)pEvents_LOD->LoadRaw("stditems.txt", 0);
372 pStdItemsTXT_Raw = v2; 379 strtok(pStdItemsTXT_Raw, "\r");
373 strtok(v2, "\r"); 380 strtok(NULL, "\r");
374 strtok(0, "\r"); 381 strtok(NULL, "\r");
375 strtok(0, "\r"); 382 strtok(NULL, "\r");
376 strtok(0, "\r"); 383 //Standard Bonuses by Group
377 Str = (char *)&pEnchantments[0].pParam; 384 for (i=0;i<24;++i)
378 v79 = 24; 385 {
379 do 386 test_string = strtok(NULL, "\r") + 1;
380 { 387 break_loop = false;
381 v3 = strtok(0, "\r") + 1; 388 decode_step=0;
382 v97 = 0; 389 do
383 v88 = 0; 390 {
384 do 391 c = *(unsigned char*)test_string;
385 { 392 temp_str_len = 0;
386 v4 = *v3; 393 while((c!='\t')&&(c>0))
387 v5 = 0; 394 {
388 while ( v4 != 9 && v4 ) 395 ++temp_str_len;
389 { 396 c=test_string[temp_str_len];
390 ++v5; 397 }
391 v4 = v3[v5]; 398 tmp_pos=test_string+temp_str_len;
392 } 399 if (*tmp_pos == 0)
393 v72 = (int)&v3[v5]; 400 break_loop = true;
394 if ( !v3[v5] ) 401 *tmp_pos = 0;
395 v88 = 1; 402 if (temp_str_len)
396 v3[v5] = 0; 403 {
397 if ( v5 ) 404 switch (decode_step)
398 { 405 {
399 if ( v97 ) 406 case 0:
400 { 407 pEnchantments[i].pBonusStat=RemoveQuotes(test_string);
401 if ( v97 == 1 ) 408 break;
402 { 409 case 1:
403 *(unsigned int *)Str = (int)RemoveQuotes(v3); 410 pEnchantments[i].pOfName= RemoveQuotes(test_string);
404 } 411 break;
405 else 412 default:
406 { 413 pEnchantments[i].to_item[decode_step-2]=atoi(test_string);
407 if ( v97 > 1 ) 414 }
408 Str[v97 + 6] = atoi(v3); 415 }
409 } 416 else
410 } 417 {
411 else 418 if (!decode_step)
412 { 419 break_loop = true;
413 *((char **)Str + 1) = RemoveQuotes(v3); 420 }
414 } 421 ++decode_step;
415 } 422 test_string=tmp_pos+1;
416 else 423 } while ((decode_step<11)&&!break_loop);
417 { 424 }
418 if ( !v97 ) 425 //Value Mod= (+100 / Plus of Item)?
419 v88 = 1; 426
420 } 427 memset(&pEnchantmentsSumm, 0, 36);
421 ++v97; 428 for(i=0;i<9;++i)
422 v3 = (char *)(v72 + 1); 429 {
423 } 430 for (j=0;j<24;++j)
424 while ( v97 <= 10 && !v88 ); 431 pEnchantmentsSumm[i]+=pEnchantments[j].to_item[i];
425 Str += 20; 432 }
426 --v79; 433
427 } 434 //Bonus range for Standard by Level
428 while ( v79 ); 435 strtok(NULL, "\r");
429 v6 = (char *)&field_116D8[3]; 436 strtok(NULL, "\r");
430 memset(&field_116D8[3], 0, 0x24u); 437 strtok(NULL, "\r");
431 v7 = &pEnchantments[0].field_8[4]; 438 strtok(NULL, "\r");
432 v73 = 9; 439 strtok(NULL, "\r");
433 do 440 for(i=0;i<6;++i) //counted from 1
434 { 441 {
435 v8 = v7; 442 test_string = strtok(NULL, "\r") + 1;
436 Stra = 24; 443 break_loop = false;
437 do 444 decode_step=0;
438 { 445 do
439 *(unsigned int *)v6 += (unsigned __int8)*v8; 446 {
440 v8 += 20; 447 c = *(unsigned char*)test_string;
441 --Stra; 448 temp_str_len = 0;
442 } 449 while((c!='\t')&&(c>0))
443 while ( Stra ); 450 {
444 v6 += 4; 451 ++temp_str_len;
445 ++v7; 452 c=test_string[temp_str_len];
446 --v73; 453 }
447 } 454 tmp_pos=test_string+temp_str_len;
448 while ( v73 ); 455 if (*tmp_pos == 0)
449 strtok(0, "\r"); 456 break_loop = true;
450 strtok(0, "\r"); 457 *tmp_pos = 0;
451 strtok(0, "\r"); 458 if (decode_step==2)
452 strtok(0, "\r"); 459 bonus_ranges[i].minR = atoi(test_string);
453 strtok(0, "\r"); 460 else if (decode_step==3)
454 Strb = 17856; 461 bonus_ranges[i].maxR =atoi(test_string);
455 do 462 ++decode_step;
456 { 463 test_string=tmp_pos+1;
457 v9 = strtok(0, "\r") + 1; 464 } while ((decode_step<4)&&!break_loop);
458 v98 = 0; 465 }
459 v89 = 0; 466
460 do 467
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; 468 pSpcItemsTXT_Raw = 0;
483 v13 = (char *)pEvents_LOD->LoadRaw("spcitems.txt", 0); 469 pSpcItemsTXT_Raw = (char *)pEvents_LOD->LoadRaw("spcitems.txt", 0);
484 pSpcItemsTXT_Raw = v13; 470 strtok(pSpcItemsTXT_Raw, "\r");
485 strtok(v13, "\r"); 471 strtok(NULL, "\r");
486 strtok(0, "\r"); 472 strtok(NULL, "\r");
487 strtok(0, "\r"); 473 strtok(NULL, "\r");
488 strtok(0, "\r"); 474 for (i=0;i<72;++i)
489 v80 = (char *)&pSpecialEnchantments[0].pParam; 475 {
490 Strc = 72; 476 test_string = strtok(NULL, "\r") + 1;
491 do 477 break_loop = false;
492 { 478 decode_step=0;
493 v99 = 0; 479 do
494 v14 = (int)(strtok(0, "\r") + 1); 480 {
495 v90 = 0; 481 c = *(unsigned char*)test_string;
496 do 482 temp_str_len = 0;
497 { 483 while((c!='\t')&&(c>0))
498 v15 = *(unsigned char *)v14; 484 {
499 v16 = 0; 485 ++temp_str_len;
500 while ( v15 != 9 && v15 ) 486 c=test_string[temp_str_len];
501 { 487 }
502 ++v16; 488 tmp_pos=test_string+temp_str_len;
503 v15 = *(unsigned char *)(v16 + v14); 489 if (*tmp_pos == 0)
504 } 490 break_loop = true;
505 v74 = v16 + v14; 491 *tmp_pos = 0;
506 if ( !*(unsigned char *)(v16 + v14) ) 492 if (temp_str_len)
507 v90 = 1; 493 {
508 *(unsigned char *)(v16 + v14) = 0; 494 switch (decode_step)
509 if ( v16 ) 495 {
510 { 496 case 0:
511 if ( v99 ) 497 pSpecialEnchantments[i].pBonusStatement=RemoveQuotes(test_string);
512 { 498 break;
513 if ( v99 == 1 ) 499 case 1:
514 { 500 pSpecialEnchantments[i].pNameAdd= RemoveQuotes(test_string);
515 *(char **)v80 = RemoveQuotes((char *)v14); 501 break;
516 } 502 case 14:
517 else 503 int res;
518 { 504 res=atoi(test_string);
519 if ( v99 <= 1 ) 505 if(!res)
520 { 506 {
521 v17 = v99 == 14; 507 ++test_string;
522 } 508 while (*test_string==' ')//fix X 2 case
523 else 509 ++test_string;
524 { 510 res=atoi(test_string);
525 v17 = v99 == 14; 511 }
526 if ( v99 < 14 ) 512 pSpecialEnchantments[i].iValue=res;
527 { 513 break;
528 v80[v99 + 6] = atoi((const char *)v14); 514 case 15:
529 goto LABEL_63; 515 pSpecialEnchantments[i].iTreasureLevel= tolower(*test_string) - 97;;
530 } 516 break;
531 } 517 default:
532 if ( v17 ) 518 pSpecialEnchantments[i].to_item_apply[decode_step-2]=atoi(test_string);
533 { 519 }
534 v18 = atoi((const char *)v14); 520 }
535 *((unsigned int *)v80 + 5) = v18; 521 else
536 if ( !v18 ) 522 {
537 *((unsigned int *)v80 + 5) = atoi((const char *)(v14 + 1)); 523 if (!decode_step)
538 } 524 break_loop = true;
539 else 525 }
540 { 526 ++decode_step;
541 if ( v99 == 15 ) 527 test_string=tmp_pos+1;
542 v80[24] = tolower(*(unsigned char *)v14) - 97; 528 } while ((decode_step<16)&&!break_loop);
543 } 529 }
544 } 530
545 } 531 pSpecialEnchantments_count = 71;
546 else 532 memset(&pSpecialEnchantmentsSumm, 0, 96);
547 { 533 for(i=0;i<12;++i)
548 *((char **)v80 + 1) = RemoveQuotes((char *)v14); 534 {
549 } 535 for (j=0;j<pSpecialEnchantments_count;++j)
550 } 536 pSpecialEnchantmentsSumm[i]+=pSpecialEnchantments[j].to_item_apply[i];
551 else 537 }
552 { 538
553 if ( !v99 ) 539
554 v90 = 1; 540
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(); 541 Initialize2DA();
592 pItemsTXT_Raw = 0; 542
593 v23 = (char *)pEvents_LOD->LoadRaw("items.txt", 0); 543 pItemsTXT_Raw = NULL;
594 pItemsTXT_Raw = v23; 544 pItemsTXT_Raw = (char*) pEvents_LOD->LoadRaw("items.txt", 0);
595 strtok(v23, "\r"); 545 strtok(pItemsTXT_Raw, "\r");
596 v24 = 0; 546 strtok(NULL, "\r");
597 strtok(0, "\r"); 547 uAllItemsCount = 0;
598 pItems[0].uItemID = 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 /*
599 while ( 2 ) 888 while ( 2 )
600 { 889 {
601 v100 = 0; 890 v100 = 0;
602 v25 = strtok(0, "\r") + 1; 891 v25 = strtok(0, "\r") + 1;
603 v91 = 0; 892 v91 = 0;
923 v30 = (char *)&pItems[v24]; 1212 v30 = (char *)&pItems[v24];
924 v81 = v30; 1213 v81 = v30;
925 if ( v30[37] == 3 ) 1214 if ( v30[37] == 3 )
926 { 1215 {
927 v85 = 0; 1216 v85 = 0;
928 Strf = (const char **)&pEnchantments[0].pParam; 1217 Strf = (const char **)&pEnchantments[0].pOfName;
929 while ( _strcmpi(*Strf, v25) ) 1218 while ( _strcmpi(*Strf, v25) )
930 { 1219 {
931 ++v85; 1220 ++v85;
932 Strf += 5; 1221 Strf += 5;
933 if ( v85 >= 24 ) 1222 if ( v85 >= 24 )
936 v81[39] = v85 + 1; 1225 v81[39] = v85 + 1;
937 LABEL_181: 1226 LABEL_181:
938 if ( !v81[39] ) 1227 if ( !v81[39] )
939 { 1228 {
940 v86 = 0; 1229 v86 = 0;
941 Strg = (const char **)&pSpecialEnchantments[0].pParam; 1230 Strg = (const char **)&pSpecialEnchantments[0].pNameAdd;
942 while ( _strcmpi(*Strg, v25) ) 1231 while ( _strcmpi(*Strg, v25) )
943 { 1232 {
944 ++v86; 1233 ++v86;
945 Strg += 7; 1234 Strg += 7;
946 if ( v86 >= 72 ) 1235 if ( v86 >= 72 )
993 ++v24; 1282 ++v24;
994 if ( v24 < 800 ) 1283 if ( v24 < 800 )
995 continue; 1284 continue;
996 break; 1285 break;
997 } 1286 }
998 pRndItemsTXT_Raw = 0; 1287 */
999 pItems[0].uItemID = v24; 1288
1000 v33 = (char *)pEvents_LOD->LoadRaw("rnditems.txt", 0); 1289 pRndItemsTXT_Raw = NULL;
1001 v34 = "\r"; 1290 uAllItemsCount = item_counter;
1002 pRndItemsTXT_Raw = v33; 1291 pRndItemsTXT_Raw = (char *)pEvents_LOD->LoadRaw("rnditems.txt", 0);
1003 strtok(v33, "\r"); 1292 strtok(pRndItemsTXT_Raw, "\r");
1004 v35 = 0;
1005 strtok(0, "\r"); 1293 strtok(0, "\r");
1006 strtok(0, "\r"); 1294 strtok(0, "\r");
1007 strtok(0, "\r"); 1295 strtok(0, "\r");
1296
1297 v35 = 0;
1008 do 1298 do
1009 { 1299 {
1010 v101 = 0; 1300 v101 = 0;
1011 v36 = strtok(0, "\r") + 1; 1301 v36 = strtok(0, "\r") + 1;
1012 v92 = 0; 1302 v92 = 0;
1028 if ( v101 ) 1318 if ( v101 )
1029 { 1319 {
1030 switch ( v101 ) 1320 switch ( v101 )
1031 { 1321 {
1032 case 2: 1322 case 2:
1033 pItems[v35].field_2C = atoi(v36); 1323 // pItems[v35].field_2C = atoi(v36);
1034 break; 1324 break;
1035 case 3: 1325 case 3:
1036 pItems[v35].field_2D = atoi(v36); 1326 // pItems[v35].field_2D = atoi(v36);
1037 break; 1327 break;
1038 case 4: 1328 case 4:
1039 pItems[v35].field_2E = atoi(v36); 1329 // pItems[v35].field_2E = atoi(v36);
1040 break; 1330 break;
1041 case 5: 1331 case 5:
1042 pItems[v35].field_2F = atoi(v36); 1332 // pItems[v35].field_2F = atoi(v36);
1043 break; 1333 break;
1044 case 6: 1334 case 6:
1045 *((unsigned char *)&pItems[0].uItemID + 16 * (3 * v35 + 3)) = atoi(v36); 1335 //*((unsigned char *)&pItems[0].uItemID + 16 * (3 * v35 + 3)) = atoi(v36);
1046 break; 1336 break;
1047 case 7: 1337 case 7:
1048 BYTE1(pItems[v35 + 1].uItemID) = atoi(v36); 1338 // BYTE1(pItems[v35 + 1].uItemID) = atoi(v36);
1049 break; 1339 break;
1050 } 1340 }
1051 } 1341 }
1052 else 1342 else
1053 { 1343 {
1064 } 1354 }
1065 while ( v101 <= 7 && !v92 ); 1355 while ( v101 <= 7 && !v92 );
1066 ++v35; 1356 ++v35;
1067 } 1357 }
1068 while ( v35 < 619 ); 1358 while ( v35 < 619 );
1359
1360
1069 if ( pRndItemsTXT_Raw ) 1361 if ( pRndItemsTXT_Raw )
1070 { 1362 {
1071 pAllocator->FreeChunk(pRndItemsTXT_Raw); 1363 pAllocator->FreeChunk(pRndItemsTXT_Raw);
1072 pRndItemsTXT_Raw = 0; 1364 pRndItemsTXT_Raw = 0;
1073 } 1365 }
1089 v39 += 4; 1381 v39 += 4;
1090 ++v40; 1382 ++v40;
1091 --v77; 1383 --v77;
1092 } 1384 }
1093 while ( v77 ); 1385 while ( v77 );
1386
1094 v42 = 0; 1387 v42 = 0;
1095 strtok(0, "\r"); 1388 strtok(0, "\r");
1096 strtok(0, "\r"); 1389 strtok(0, "\r");
1097 strtok(0, "\r"); 1390 strtok(0, "\r");
1098 strtok(0, "\r"); 1391 strtok(0, "\r");
1236 } 1529 }
1237 while ( v102 <= 7 && !v93 ); 1530 while ( v102 <= 7 && !v93 );
1238 ++v87; 1531 ++v87;
1239 } 1532 }
1240 while ( v87 < 3 ); 1533 while ( v87 < 3 );
1534
1535
1536
1241 pSkillDescTXT_Raw = 0; 1537 pSkillDescTXT_Raw = 0;
1242 pSkillDescTXT_Raw = (char *)pEvents_LOD->LoadRaw("skilldes.txt", 0); 1538 pSkillDescTXT_Raw = (char *)pEvents_LOD->LoadRaw("skilldes.txt", 0);
1243 strtok(pSkillDescTXT_Raw, "\r"); 1539 strtok(pSkillDescTXT_Raw, "\r");
1244 v46 = 0; 1540 v46 = 0;
1245 do 1541 do
1291 } 1587 }
1292 while ( v103 <= 5 && !v94 ); 1588 while ( v103 <= 5 && !v94 );
1293 ++v46; 1589 ++v46;
1294 } 1590 }
1295 while ( v46 < 37 ); 1591 while ( v46 < 37 );
1592
1593
1296 pStatsTXT_Raw = 0; 1594 pStatsTXT_Raw = 0;
1297 pStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("stats.txt", 0); 1595 pStatsTXT_Raw = (char *)pEvents_LOD->LoadRaw("stats.txt", 0);
1298 strtok(pStatsTXT_Raw, "\r"); 1596 strtok(pStatsTXT_Raw, "\r");
1299 Stri = 0; 1597 Stri = 0;
1300 do 1598 do
1301 { 1599 {
1302 v51 = 0; 1600 v51 = 0;
1303 v95 = 0; 1601 v95 = 0;
1304 v52 = strtok(0, v34) + 1; 1602 v52 = strtok(0, pStatsTXT_Raw) + 1;
1305 do 1603 do
1306 { 1604 {
1307 v53 = *v52; 1605 v53 = *v52;
1308 v54 = 0; 1606 v54 = 0;
1309 if ( *v52 != 9 ) 1607 if ( *v52 != 9 )
1409 } 1707 }
1410 while ( v51 < 2 && !v95 ); 1708 while ( v51 < 2 && !v95 );
1411 ++Stri; 1709 ++Stri;
1412 } 1710 }
1413 while ( Stri < 26 ); 1711 while ( Stri < 26 );
1712
1713
1414 pClassTXT_Raw = 0; 1714 pClassTXT_Raw = 0;
1415 pClassTXT_Raw = (char *)pEvents_LOD->LoadRaw("class.txt", 0); 1715 pClassTXT_Raw = (char *)pEvents_LOD->LoadRaw("class.txt", 0);
1416 strtok(pClassTXT_Raw, v34); 1716 strtok(pClassTXT_Raw, v34);
1417 Strj = pClassDescriptions; 1717 Strj = pClassDescriptions;
1418 do 1718 do
1489 } 1789 }
1490 1790
1491 1791
1492 //----- (00453B3C) -------------------------------------------------------- 1792 //----- (00453B3C) --------------------------------------------------------
1493 void ItemsTable::LoadPotions() 1793 void ItemsTable::LoadPotions()
1494 { 1794 {
1495 1795
1496 CHAR Text[90]; // [sp+Ch] [bp-6Ch]@26 1796 CHAR Text[90]; // [sp+Ch] [bp-6Ch]@26
1497 char* test_string; 1797 char* test_string;
1498 unsigned int uRow; 1798 unsigned int uRow;
1499 unsigned int uColumn; 1799 unsigned int uColumn;
1500 unsigned __int8 potion_value; 1800 unsigned __int8 potion_value;
1501 1801
1502 if ( pPotionsTXT_Raw ) 1802 if ( pPotionsTXT_Raw )
1503 pAllocator->FreeChunk(pPotionsTXT_Raw); 1803 pAllocator->FreeChunk(pPotionsTXT_Raw);
1504 pPotionsTXT_Raw = NULL; 1804 pPotionsTXT_Raw = NULL;
1505 pPotionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("potion.txt", 0); 1805 pPotionsTXT_Raw = (char *)pEvents_LOD->LoadRaw("potion.txt", 0);
1506 test_string = strtok(pPotionsTXT_Raw,"\t\r\n"); 1806 test_string = strtok(pPotionsTXT_Raw,"\t\r\n");
1507 while ( 1 ) 1807 while ( 1 )
1508 { 1808 {
1509 if ( !test_string ) 1809 if ( !test_string )
1510 { 1810 {
1511 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); 1811 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
1512 return; 1812 return;
1513 } 1813 }
1514 if ( !strcmp(test_string, "222") ) 1814 if ( !strcmp(test_string, "222") )
1515 break; 1815 break;
1516 1816
1517 test_string = strtok(NULL, "\t\r\n"); 1817 test_string = strtok(NULL, "\t\r\n");
1518 } 1818 }
1519 while ( 1 ) 1819 while ( 1 )
1520 {
1521 test_string = strtok(NULL, "\t\r\n");
1522
1523 if ( !test_string )
1524 { 1820 {
1525 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); 1821 test_string = strtok(NULL, "\t\r\n");
1526 return; 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;
1527 } 1830 }
1528 if ( !strcmp(test_string, "222") ) 1831
1529 break; 1832 for (uRow = 0;uRow < 50; ++uRow)
1530 }
1531
1532 for (uRow = 0;uRow < 50; ++uRow)
1533 {
1534 int skip_count;
1535 for (skip_count = 0;skip_count < 6; ++skip_count)
1536 {
1537 if ( !strtok(NULL, "\r\t\n") )
1538 break;
1539 }
1540 if ( skip_count != 6 )
1541 break;
1542 for (uColumn = 0; uColumn < 50; ++uColumn)
1543 { 1833 {
1544 test_string = strtok(NULL, "\r\t\n"); 1834 int skip_count;
1545 if ( !test_string ) 1835 for (skip_count = 0;skip_count < 6; ++skip_count)
1546 break; 1836 {
1547 potion_value = atoi(test_string); 1837 if ( !strtok(NULL, "\r\t\n") )
1548 char c=*test_string; 1838 break;
1549 if ( !potion_value ) 1839 }
1550 { 1840 if ( skip_count != 6 )
1551 if ( tolower(c) == 'e' ) 1841 break;
1552 potion_value = atoi(test_string + 1); 1842 for (uColumn = 0; uColumn < 50; ++uColumn)
1553 else 1843 {
1554 potion_value = 0; 1844 test_string = strtok(NULL, "\r\t\n");
1555 } 1845 if ( !test_string )
1556 this->potion_data[uRow][uColumn]=potion_value; 1846 break;
1557 } 1847 potion_value = atoi(test_string);
1558 if ( uColumn != 50 ) 1848 char c=*test_string;
1559 break; 1849 if ( !potion_value )
1560 strtok(NULL, "\r\t\n"); 1850 {
1561 } 1851 if ( tolower(c) == 'e' )
1562 1852 potion_value = atoi(test_string + 1);
1563 if ( uRow != 50 ) 1853 else
1564 { 1854 potion_value = 0;
1565 wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn); 1855 }
1566 MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); 1856 this->potion_data[uRow][uColumn]=potion_value;
1567 } 1857 }
1568 if ( pPotionsTXT_Raw ) 1858 if ( uColumn != 50 )
1569 { 1859 break;
1570 pAllocator->FreeChunk(pPotionsTXT_Raw); 1860 strtok(NULL, "\r\t\n");
1571 pPotionsTXT_Raw = 0; 1861 }
1572 } 1862
1573 } 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 }
1574 1874
1575 //----- (00453CE5) -------------------------------------------------------- 1875 //----- (00453CE5) --------------------------------------------------------
1576 void ItemsTable::LoadPotionNotes() 1876 void ItemsTable::LoadPotionNotes()
1577 { 1877 {
1578 1878
1579 CHAR Text[90]; 1879 CHAR Text[90];
1580 char* test_string; 1880 char* test_string;
1581 unsigned int uRow; 1881 unsigned int uRow;
1582 unsigned int uColumn; 1882 unsigned int uColumn;
1583 unsigned __int8 potion_note; 1883 unsigned __int8 potion_note;
1584 1884
1585 if ( pPotionNotesTXT_Raw ) 1885 if ( pPotionNotesTXT_Raw )
1586 pAllocator->FreeChunk(pPotionNotesTXT_Raw); 1886 pAllocator->FreeChunk(pPotionNotesTXT_Raw);
1587 pPotionNotesTXT_Raw = NULL; 1887 pPotionNotesTXT_Raw = NULL;
1588 pPotionNotesTXT_Raw = (char *)pEvents_LOD->LoadRaw("potnotes.txt", 0); 1888 pPotionNotesTXT_Raw = (char *)pEvents_LOD->LoadRaw("potnotes.txt", 0);
1589 test_string = strtok(pPotionNotesTXT_Raw ,"\t\r\n"); 1889 test_string = strtok(pPotionNotesTXT_Raw ,"\t\r\n");
1590 while ( 1 ) 1890 while ( 1 )
1591 { 1891 {
1592 1892 if ( !test_string )
1593 if ( !test_string ) 1893 {
1594 { 1894 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
1595 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); 1895 return;
1596 return; 1896 }
1597 } 1897 if ( !strcmp(test_string, "222") )
1598 if ( !strcmp(test_string, "222") ) 1898 break;
1599 break; 1899 test_string = strtok(NULL, "\t\r\n");
1600 test_string = strtok(NULL, "\t\r\n"); 1900 }
1601 } 1901 while ( 1 )
1602 while ( 1 ) 1902 {
1603 { 1903 test_string = strtok(NULL, "\t\r\n");
1604 test_string = strtok(NULL, "\t\r\n"); 1904
1605 1905 if ( !test_string )
1606 if ( !test_string ) 1906 {
1607 { 1907 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
1608 MessageBoxA(0, "Error Pre-Parsing Potion Table", "Load Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); 1908 return;
1609 return; 1909 }
1610 } 1910 if ( !strcmp(test_string, "222") )
1611 if ( !strcmp(test_string, "222") ) 1911 break;
1612 break; 1912 }
1613 } 1913
1614 1914 for (uRow = 0;uRow < 50; ++uRow)
1615 for (uRow = 0;uRow < 50; ++uRow) 1915 {
1616 { 1916 int skip_count;
1617 int skip_count; 1917 for (skip_count = 0;skip_count < 6; ++skip_count)
1618 for (skip_count = 0;skip_count < 6; ++skip_count) 1918 {
1619 { 1919 if ( !strtok(NULL, "\r\t\n") )
1620 if ( !strtok(NULL, "\r\t\n") ) 1920 break;
1621 break; 1921 }
1622 } 1922 if ( skip_count != 6 )
1623 if ( skip_count != 6 ) 1923 break;
1624 break; 1924 for (uColumn = 0; uColumn < 50; ++uColumn)
1625 for (uColumn = 0; uColumn < 50; ++uColumn) 1925 {
1626 { 1926 test_string = strtok(NULL, "\r\t\n");
1627 test_string = strtok(NULL, "\r\t\n"); 1927 if ( !test_string )
1628 if ( !test_string ) 1928 break;
1629 break; 1929 potion_note = atoi(test_string);
1630 potion_note = atoi(test_string); 1930 char c=*test_string;
1631 char c=*test_string; 1931 if ( !potion_note )
1632 if ( !potion_note ) 1932 {
1633 { 1933 if ( tolower(c) == 'e' )
1634 if ( tolower(c) == 'e' ) 1934 potion_note = atoi(test_string + 1);
1635 potion_note = atoi(test_string + 1); 1935 else
1636 else 1936 potion_note = 0;
1637 potion_note = 0; 1937 }
1638 } 1938 this->potion_note[uRow][uColumn]=potion_note;
1639 this->potion_note[uRow][uColumn]=potion_note; 1939 }
1640 } 1940 if ( uColumn != 50 )
1641 if ( uColumn != 50 ) 1941 break;
1642 break; 1942 strtok(NULL, "\r\t\n");
1643 strtok(NULL, "\r\t\n"); 1943 }
1644 } 1944 if ( uRow != 50 )
1645 1945 {
1646 if ( uRow != 50 ) 1946 wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn);
1647 { 1947 MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE);
1648 wsprintfA(Text, "Error Parsing Potion Table at Row: %d Column: %d", uRow, uColumn); 1948 }
1649 MessageBoxA(0, Text, "Parsing Error", MB_ICONHAND|MB_CANCELTRYCONTINUE); 1949 }
1650 }
1651 }
1652 1950
1653 1951
1654 //----- (00456442) -------------------------------------------------------- 1952 //----- (00456442) --------------------------------------------------------
1655 unsigned int ItemGen::GetValue() 1953 unsigned int ItemGen::GetValue()
1656 { 1954 {
1675 LABEL_12: 1973 LABEL_12:
1676 result = uBaseValue; 1974 result = uBaseValue;
1677 } 1975 }
1678 else 1976 else
1679 { 1977 {
1680 v3 = *(unsigned int *)&pItemsTable->pEnchantments[23].field_8[28 * v4 + 8]; 1978 v3 = *(unsigned int *)&pItemsTable->pEnchantments[23].to_item[28 * v4 + 8];
1681 if ( (unsigned int)v3 > 0xA ) 1979 if ( (unsigned int)v3 > 0xA )
1682 return uBaseValue + v3; 1980 return uBaseValue + v3;
1683 result = uBaseValue * v3; 1981 result = uBaseValue * v3;
1684 } 1982 }
1685 return result; 1983 return result;
1771 || v7 == 68 ) 2069 || v7 == 68 )
1772 { 2070 {
1773 sprintf( 2071 sprintf(
1774 item__getname_buffer, 2072 item__getname_buffer,
1775 "%s %s", 2073 "%s %s",
1776 *(unsigned int *)&pItemsTable->pEnchantments[22].field_8[28 * v7 + 8], 2074 *(unsigned int *)&pItemsTable->pEnchantments[22].to_item[28 * v7 + 8],
1777 pItemsTable->pItems[v1->uItemID].pName); 2075 pItemsTable->pItems[v1->uItemID].pName);
1778 return v4; 2076 return v4;
1779 } 2077 }
1780 strcat(item__getname_buffer, " "); 2078 strcat(item__getname_buffer, " ");
1781 v9 = *(const char **)&pItemsTable->pEnchantments[22].field_8[28 * v1->uAdditionalValue + 8]; 2079 v9 = *(const char **)&pItemsTable->pEnchantments[22].to_item[28 * v1->uAdditionalValue + 8];
1782 } 2080 }
1783 strcat(item__getname_buffer, v9); 2081 strcat(item__getname_buffer, v9);
1784 } 2082 }
1785 return v4; 2083 return v4;
1786 } 2084 }
2066 } 2364 }
2067 LABEL_73: 2365 LABEL_73:
2068 if ( v4->uItemID == ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION 2366 if ( v4->uItemID == ITEM_SPELLBOOK_LIGHT_DIVINE_INTERVENTION
2069 && !(unsigned __int16)_449B57_test_bit(pParty->_award_bits, 239) ) 2367 && !(unsigned __int16)_449B57_test_bit(pParty->_award_bits, 239) )
2070 v4->uItemID = ITEM_SPELLBOOK_LIGHT_SUN_BURST; 2368 v4->uItemID = ITEM_SPELLBOOK_LIGHT_SUN_BURST;
2071 if ( BYTE2(pItemsTable->pItems[v4->uItemID + 1].uItemID) ) 2369 if ( pItemsTable->pItems[v4->uItemID + 1].uItemID_Rep_St )
2072 v4->uAttributes = 0; 2370 v4->uAttributes = 0;
2073 else 2371 else
2074 v4->uAttributes = 1; 2372 v4->uAttributes = 1;
2075 if ( v5->pItems[v4->uItemID].uEquipType != EQUIP_POTION ) 2373 if ( v5->pItems[v4->uItemID].uEquipType != EQUIP_POTION )
2076 { 2374 {
2113 { 2411 {
2114 LABEL_127: 2412 LABEL_127:
2115 v26 = rand() % v5->field_116D8[v5->pItems[v4->uItemID].uEquipType]; 2413 v26 = rand() % v5->field_116D8[v5->pItems[v4->uItemID].uEquipType];
2116 v27 = v4->uItemID; 2414 v27 = v4->uItemID;
2117 v4->_bonus_type = 0; 2415 v4->_bonus_type = 0;
2118 for ( i = v5->pEnchantments[0].field_8[v5->pItems[v27].uEquipType + 1]; 2416 for ( i = v5->pEnchantments[0].to_item[v5->pItems[v27].uEquipType + 1];
2119 i < v26; 2417 i < v26;
2120 i += v5->pEnchantments[v4->_bonus_type].field_8[v5->pItems[v29].uEquipType + 1] ) 2418 i += v5->pEnchantments[v4->_bonus_type].to_item[v5->pItems[v29].uEquipType + 1] )
2121 { 2419 {
2122 v29 = v4->uItemID; 2420 v29 = v4->uItemID;
2123 ++v4->_bonus_type; 2421 ++v4->_bonus_type;
2124 } 2422 }
2125 ++v4->_bonus_type; 2423 ++v4->_bonus_type;
2141 if ( !(v35 ^ v36) ) 2439 if ( !(v35 ^ v36) )
2142 return; 2440 return;
2143 memset(&Dst, 0, 0xC80u); 2441 memset(&Dst, 0, 0xC80u);
2144 v39 = 0; 2442 v39 = 0;
2145 a2b = 0; 2443 a2b = 0;
2146 if ( v5->field_11798 > 0 ) 2444 if ( v5->pSpecialEnchantments_count > 0 )
2147 { 2445 {
2148 v52 = -16 - (uint)v5; 2446 v52 = -16 - (uint)v5;
2149 v58 = (int *)&Dst; 2447 v58 = (int *)&Dst;
2150 v40 = (int)&v5->pSpecialEnchantments[1]; 2448 v40 = (int)&v5->pSpecialEnchantments[1];
2151 do 2449 do
2160 case 3: 2458 case 3:
2161 v43 = *(unsigned char *)v40; 2459 v43 = *(unsigned char *)v40;
2162 if ( !*(unsigned char *)v40 || v43 == 1 ) 2460 if ( !*(unsigned char *)v40 || v43 == 1 )
2163 { 2461 {
2164 LABEL_117: 2462 LABEL_117:
2165 v39 += *((unsigned char *)&v5->pItems[0].uItemID + v40 + v52 + v5->pItems[v4->uItemID].uEquipType); 2463 v39 += *((unsigned char *)&v5->uAllItemsCount + v40 + v52 + v5->pItems[v4->uItemID].uEquipType);
2166 if ( *((unsigned char *)&v5->pItems[0].uItemID + v40 + v52 + v5->pItems[v4->uItemID].uEquipType) ) 2464 if ( *((unsigned char *)&v5->uAllItemsCount + v40 + v52 + v5->pItems[v4->uItemID].uEquipType) )
2167 { 2465 {
2168 v44 = v58; 2466 v44 = v58;
2169 ++v58; 2467 ++v58;
2170 *v44 = a2b; 2468 *v44 = a2b;
2171 } 2469 }
2189 goto LABEL_117; 2487 goto LABEL_117;
2190 LABEL_119: 2488 LABEL_119:
2191 ++a2b; 2489 ++a2b;
2192 v40 += 28; 2490 v40 += 28;
2193 } 2491 }
2194 while ( a2b < v5->field_11798 ); 2492 while ( a2b < v5->pSpecialEnchantments_count );
2195 } 2493 }
2196 v45 = rand(); 2494 v45 = rand();
2197 v4->uAdditionalValue = *(uint *)Dst; 2495 v4->uAdditionalValue = *(uint *)Dst;
2198 v46 = v45 % v39 + 1; 2496 v46 = v45 % v39 + 1;
2199 a2c = *((unsigned char *)&v5->pItems[0].uItemID + 28 * (*(uint *)Dst + 1389) + v5->pItems[v4->uItemID].uEquipType); 2497 a2c = *((unsigned char *)&v5->uAllItemsCount + 28 * (*(uint *)Dst + 1389) + v5->pItems[v4->uItemID].uEquipType);
2200 if ( a2c < v46 ) 2498 if ( a2c < v46 )
2201 { 2499 {
2202 for ( j = (int *)&Dst; ; j = (int *)v59 ) 2500 for ( j = (int *)&Dst; ; j = (int *)v59 )
2203 { 2501 {
2204 v48 = v4->uItemID; 2502 v48 = v4->uItemID;
2205 v49 = (int)(j + 1); 2503 v49 = (int)(j + 1);
2206 v59 = v49; 2504 v59 = v49;
2207 v50 = *(unsigned int *)v49; 2505 v50 = *(unsigned int *)v49;
2208 v4->uAdditionalValue = v50; 2506 v4->uAdditionalValue = v50;
2209 a2c += *((unsigned char *)&v5->pItems[0].uItemID + 28 * (v50 + 1389) + v5->pItems[v48].uEquipType); 2507 a2c += *((unsigned char *)&v5->uAllItemsCount + 28 * (v50 + 1389) + v5->pItems[v48].uEquipType);
2210 if ( a2c >= v46 ) 2508 if ( a2c >= v46 )
2211 break; 2509 break;
2212 } 2510 }
2213 } 2511 }
2214 ++v4->uAdditionalValue; 2512 ++v4->uAdditionalValue;