Mercurial > mm7
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; |