changeset 698:b097497f07e2

monster table continue fixinf
author Gloval
date Sun, 17 Mar 2013 18:31:54 +0400
parents 52329962fcdb
children 0c6510a626e2
files Monsters.cpp Outdoor.cpp mm7_2.cpp mm7_data.h
diffstat 4 files changed, 446 insertions(+), 486 deletions(-) [+]
line wrap: on
line diff
--- a/Monsters.cpp	Sun Mar 17 12:47:19 2013 +0400
+++ b/Monsters.cpp	Sun Mar 17 18:31:54 2013 +0400
@@ -16,6 +16,388 @@
 struct MonsterStats *pMonsterStats;
 struct MonsterList *pMonsterList;
 
+unsigned int __fastcall ParseSpellType(struct FrameTableTxtLine *, int a2);
+
+int  ParseAttackType(const char *damage_type_str);
+void ParseDamage( char *damage_str, unsigned __int8* dice_rolls, unsigned __int8* dice_sides, unsigned __int8* dmg_bonus );
+int ParseMissleAttackType(const char *missle_attack_str);
+int ParseSpecialAttack(const char *spec_att_str);
+
+//----- (004548E2) --------------------------------------------------------
+    unsigned int __fastcall ParseSpellType(FrameTableTxtLine *a1, int a2)
+    {
+    int v2; // edi@1
+    int v3; // esi@1
+    unsigned int result; // eax@1
+    std::string v5; // [sp-18h] [bp-28h]@75
+    const char *v6; // [sp-8h] [bp-18h]@75
+    signed int v7; // [sp-4h] [bp-14h]@3
+    std::string *v8; // [sp+8h] [bp-8h]@75
+    int a3; // [sp+Fh] [bp-1h]@75
+
+    v2 = (int)a1;
+    v3 = a2;
+    result = (int)a1->pProperties[0];
+    if ( result )
+        {
+        if ( !_strcmpi((const char *)result, "Dispel") )
+            {
+            v7 = 80;
+LABEL_71:
+            result = v7;
+LABEL_76:
+            ++*(int *)v3;
+            return result;
+            }
+        if ( _strcmpi(*(const char **)(v2 + 4), "Day") )
+            {
+            if ( _strcmpi(*(const char **)(v2 + 4), "Hour") )
+                {
+                if ( _strcmpi(*(const char **)(v2 + 4), "Shield") )
+                    {
+                    if ( !_strcmpi(*(const char **)(v2 + 4), "Spirit") )
+                        {
+                        v7 = 52;
+                        goto LABEL_71;
+                        }
+                    if ( !_strcmpi(*(const char **)(v2 + 4), "Power") )
+                        {
+                        v7 = 77;
+                        goto LABEL_71;
+                        }
+                    if ( !_strcmpi(*(const char **)(v2 + 4), "Meteor") )
+                        {
+                        v7 = 9;
+                        goto LABEL_71;
+                        }
+                    if ( !_strcmpi(*(const char **)(v2 + 4), "Lightning") )
+                        {
+                        v7 = 18;
+                        goto LABEL_71;
+                        }
+                    if ( _strcmpi(*(const char **)(v2 + 4), "Implosion") )
+                        {
+                        if ( !_strcmpi(*(const char **)(v2 + 4), "Stone") )
+                            {
+                            v7 = 38;
+                            goto LABEL_71;
+                            }
+                        if ( _strcmpi(*(const char **)(v2 + 4), "Haste") )
+                            {
+                            if ( _strcmpi(*(const char **)(v2 + 4), "Heroism") )
+                                {
+                                if ( !_strcmpi(*(const char **)(v2 + 4), "Pain") )
+                                    {
+                                    v7 = 95;
+                                    goto LABEL_71;
+                                    }
+                                if ( _strcmpi(*(const char **)(v2 + 4), "Sparks") )
+                                    {
+                                    if ( !_strcmpi(*(const char **)(v2 + 4), "Light") )
+                                        {
+                                        v7 = 78;
+                                        goto LABEL_71;
+                                        }
+                                    if ( !_strcmpi(*(const char **)(v2 + 4), "Toxic") )
+                                        {
+                                        v7 = 90;
+                                        goto LABEL_71;
+                                        }
+                                    if ( _strcmpi(*(const char **)(v2 + 4), "ShrapMetal") )
+                                        {
+                                        if ( _strcmpi(*(const char **)(v2 + 4), "Paralyze") )
+                                            {
+                                            if ( _strcmpi(*(const char **)(v2 + 4), "Fireball") )
+                                                {
+                                                if ( _strcmpi(*(const char **)(v2 + 4), "Incinerate") )
+                                                    {
+                                                    if ( !_strcmpi(*(const char **)(v2 + 4), "Fire") )
+                                                        {
+                                                        v7 = 2;
+                                                        goto LABEL_71;
+                                                        }
+                                                    if ( !_strcmpi(*(const char **)(v2 + 4), "Rock") )
+                                                        {
+                                                        v7 = 41;
+                                                        goto LABEL_71;
+                                                        }
+                                                    if ( !_strcmpi(*(const char **)(v2 + 4), "Mass") )
+                                                        {
+                                                        v7 = 44;
+                                                        goto LABEL_71;
+                                                        }
+                                                    if ( !_strcmpi(*(const char **)(v2 + 4), "Ice") )
+                                                        {
+                                                        v7 = 26;
+                                                        goto LABEL_71;
+                                                        }
+                                                    if ( !_strcmpi(*(const char **)(v2 + 4), "Acid") )
+                                                        {
+                                                        v7 = 29;
+                                                        goto LABEL_71;
+                                                        }
+                                                    if ( _strcmpi(*(const char **)(v2 + 4), "Bless") )
+                                                        {
+                                                        if ( !_strcmpi(*(const char **)(v2 + 4), "Dragon") )
+                                                            {
+                                                            v7 = 97;
+                                                            goto LABEL_71;
+                                                            }
+                                                        if ( _strcmpi(*(const char **)(v2 + 4), "Reanimate") )
+                                                            {
+                                                            if ( !_strcmpi(*(const char **)(v2 + 4), "Summon") )
+                                                                {
+                                                                v7 = 82;
+                                                                goto LABEL_71;
+                                                                }
+                                                            if ( _strcmpi(*(const char **)(v2 + 4), "Fate") )
+                                                                {
+                                                                if ( _strcmpi(*(const char **)(v2 + 4), "Harm") )
+                                                                    {
+                                                                    if ( !_strcmpi(*(const char **)(v2 + 4), "Mind") )
+                                                                        {
+                                                                        v7 = 57;
+                                                                        goto LABEL_71;
+                                                                        }
+                                                                    if ( _strcmpi(*(const char **)(v2 + 4), "Blades") )
+                                                                        {
+                                                                        if ( !_strcmpi(*(const char **)(v2 + 4), "Psychic") )
+                                                                            {
+                                                                            v7 = 65;
+                                                                            goto LABEL_71;
+                                                                            }
+                                                                        if ( _strcmpi(*(const char **)(v2 + 4), "Hammerhands") )
+                                                                            {
+                                                                            sprintf(pTmpBuf, "Unknown monster spell %s", *(int *)(v2 + 4));
+                                                                            MessageBoxA(nullptr, pTmpBuf, "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Itemdata.cpp:1562", 0);
+                                                                            result = 0;
+                                                                            goto LABEL_76;
+                                                                            }
+                                                                        v7 = 73;
+                                                                        }
+                                                                    else
+                                                                        {
+                                                                        v7 = 39;
+                                                                        }
+                                                                    }
+                                                                else
+                                                                    {
+                                                                    v7 = 70;
+                                                                    }
+                                                                }
+                                                            else
+                                                                {
+                                                                v7 = 47;
+                                                                }
+                                                            }
+                                                        else
+                                                            {
+                                                            v7 = 89;
+                                                            }
+                                                        }
+                                                    else
+                                                        {
+                                                        v7 = 46;
+                                                        }
+                                                    }
+                                                else
+                                                    {
+                                                    v7 = 11;
+                                                    }
+                                                }
+                                            else
+                                                {
+                                                v7 = 6;
+                                                }
+                                            }
+                                        else
+                                            {
+                                            v7 = 81;
+                                            }
+                                        }
+                                    else
+                                        {
+                                        v7 = 93;
+                                        }
+                                    }
+                                else
+                                    {
+                                    v7 = 15;
+                                    }
+                                }
+                            else
+                                {
+                                v7 = 51;
+                                }
+                            }
+                        else
+                            {
+                            v7 = 5;
+                            }
+                        }
+                    else
+                        {
+                        v7 = 20;
+                        }
+                    }
+                else
+                    {
+                    v7 = 17;
+                    }
+                return v7;
+                }
+            v7 = 86;
+            }
+        else
+            {
+            v7 = 85;
+            }
+        *(int *)v3 += 2;
+        result = v7;
+        }
+    return result;
+    }
+
+//----- (00454CB4) --------------------------------------------------------
+int ParseAttackType( const char *damage_type_str )
+    {
+
+    switch (tolower(*damage_type_str))
+        {
+    case 'f': return 0;  //fire
+    case 'a': return 1; //air
+    case 'w': return 2; //water
+    case 'e': return 3; //earth 
+
+    case 's': return 6; //spirit
+    case 'm': return 7; //mind 
+        //m ?? 8
+    case 'l': return 9;  //light
+    case 'd': return 10; //dark
+        // d?? 11
+        }
+    return 4;  //phis
+
+    }
+
+//----- (00454D7D) --------------------------------------------------------
+void ParseDamage( char *damage_str, unsigned __int8* dice_rolls, unsigned __int8* dice_sides, unsigned __int8* dmg_bonus )
+    {
+    int str_len=0;
+    int str_pos=0;
+    bool dice_flag=false;
+
+    *dice_rolls = 0;
+    *dice_sides = 1;
+    *dmg_bonus = 0;
+ 
+    str_len = strlen(damage_str);
+    if (str_len<=0)
+        return;
+    for (str_pos=0;str_pos<str_len;++str_pos )
+        {
+        if (tolower(damage_str[str_pos])=='d')
+            {
+            damage_str[str_pos]='\0';
+            *dice_rolls=atoi(damage_str);
+            *dice_sides=atoi(&damage_str[str_pos+1]);
+            dice_flag=true;
+            damage_str[str_pos]='d';
+            }
+        else if (tolower(damage_str[str_pos])=='+')
+            *dmg_bonus=atoi(&damage_str[str_pos+1]);
+        }
+    if (!dice_flag)
+        {
+        if ((*damage_str>='0')&&(*damage_str<='9'))
+            {
+            *dice_rolls =atoi(damage_str);
+            *dice_sides = 1;
+            }
+        }
+    }
+
+//----- (00454E3A) --------------------------------------------------------
+int  ParseMissleAttackType(const char *missle_attack_str)
+    {
+    if ( !_strcmpi(missle_attack_str, "ARROW") )
+        return 1;
+    else if ( !_strcmpi(missle_attack_str, "ARROWF") )
+        return 2;
+    else if ( !_strcmpi(missle_attack_str, "FIRE") )
+        return 3;
+    else if ( !_strcmpi(missle_attack_str, "AIR") )       
+        return 4;
+    else if ( !_strcmpi(missle_attack_str, "WATER") )
+        return 5;
+    else if ( !_strcmpi(missle_attack_str, "EARTH") )
+        return 6;
+    else if ( !_strcmpi(missle_attack_str, "SPIRIT") )       
+        return 7;
+    else if ( !_strcmpi(missle_attack_str, "MIND") )
+        return 8;
+    else if ( !_strcmpi(missle_attack_str, "BODY") )
+        return 9;
+    else if ( !_strcmpi(missle_attack_str, "LIGHT") )       
+        return 10;
+    else if ( !_strcmpi(missle_attack_str, "DARK") )
+        return 11;
+    else if ( !_strcmpi(missle_attack_str, "ENER") )       
+        return 13;
+    else return 0;
+    }
+
+
+int ParseSpecialAttack(const char *spec_att_str)
+    {
+    if ( strstr(spec_att_str, "curse") )
+        return  1;
+    else if ( strstr(spec_att_str, "weak") )
+        return  2;
+    else if ( strstr(spec_att_str, "asleep") )
+         return  3;
+    else if ( strstr(spec_att_str, "afraid") )
+         return  23;
+    else if ( strstr(spec_att_str, "drunk") )
+         return  4;
+    else if ( strstr(spec_att_str, "insane") )
+         return  5;
+    else if ( strstr(spec_att_str, "poison1") )
+         return  6;
+    else if ( strstr(spec_att_str, "poison2") )
+        return  7;
+    else if ( strstr(spec_att_str, "poison3") )
+        return  8;
+    else if ( strstr(spec_att_str, "disease1") )  
+        return  9;
+    else if ( strstr(spec_att_str, "disease2") )
+        return  10;
+    else if ( strstr(spec_att_str, "disease3") )
+        return  11;
+    else if ( strstr(spec_att_str, "paralyze") )
+        return  12;
+    else if ( strstr(spec_att_str, "uncon") )
+        return  13;
+    else if ( strstr(spec_att_str, "dead") )
+        return  14;
+    else if ( strstr(spec_att_str, "stone") )
+        return  15;
+    else if ( strstr(spec_att_str, "errad") )
+        return  16;
+    else if ( strstr(spec_att_str, "brkitem") )
+        return  17;
+    else if ( strstr(spec_att_str, "brkarmor") )
+        return  18;
+    else if ( strstr(spec_att_str, "brkweapon") )
+        return  19;
+    else if ( strstr(spec_att_str, "steal") )
+        return  20;
+    else if ( strstr(spec_att_str, "age") )
+        return  21;
+    else if ( strstr(spec_att_str, "drainsp") )
+        return  22;
+    else return 0;                   
+    }
 
 //----- (004598FC) --------------------------------------------------------
 bool MonsterList::FromFileTxt(const char *Args)
@@ -159,8 +541,8 @@
 void MonsterList::FromFile(void *pSerialized)
 {
   uNumMonsters = *(int *)pSerialized;
-  pMonsters = (MonsterDesc *)pAllocator->AllocNamedChunk(pMonsters, 152 * uNumMonsters, "Mon Race");
-  memcpy(pMonsters, (char *)pSerialized + 4, 152 * uNumMonsters);
+  pMonsters = (MonsterDesc *)pAllocator->AllocNamedChunk(pMonsters, sizeof(MonsterDesc) * uNumMonsters, "Mon Race");
+  memcpy(pMonsters, (char *)pSerialized + 4, sizeof(MonsterDesc) * uNumMonsters);
 }
 
 //----- (00459860) --------------------------------------------------------
@@ -429,9 +811,7 @@
                     pInfos[curr_rec_num].pPictureName=RemoveQuotes(test_string);
                     break;
                 case 3:
-                    {
                     pInfos[curr_rec_num].uLevel=atoi(test_string);
-                    }
                     break;
                 case 4:
                     {
@@ -457,9 +837,7 @@
                     }
                     break;
                 case 5:
-                    {
                     pInfos[curr_rec_num].uAC=atoi(test_string);
-                    }
                     break;
                 case 6:
                     {
@@ -495,6 +873,8 @@
                     pInfos[curr_rec_num].uTreasureDropChance=0;
                     pInfos[curr_rec_num].uTreasureDiceRolls=0;
                     pInfos[curr_rec_num].uTreasureDiceSides=0;
+                    pInfos[curr_rec_num].uTreasureType=0;
+                    pInfos[curr_rec_num].uTreasureLevel=0;
                     if (test_string[0]=='"')
                         test_string[0]=' ';
                     str_len=strlen(test_string);
@@ -553,7 +933,7 @@
                                 ++str_pos;
                                 }
                                 while(str_pos<str_len);
-                                pInfos[curr_rec_num].uTreasureType=0;
+                              
                                 pInfos[curr_rec_num].uTreasureLevel=test_string[str_pos+1]-'0';
                                 item_name=&test_string[str_pos+2];
                                 if (*item_name)
@@ -656,19 +1036,13 @@
                     }
                     break;
                 case 12:
-                    {
                     pInfos[curr_rec_num].uHostilityType=(MonsterInfo::HostilityRadius)atoi(test_string);
-                    }
                     break;
                 case 13:
-                    {
                     pInfos[curr_rec_num].uBaseSpeed=atoi(test_string);
-                    }
                     break;
                 case 14:
-                    {
                     pInfos[curr_rec_num].uRecoveryTime=atoi(test_string);
-                    }
                     break;
                 case 15:
                     {
@@ -687,7 +1061,7 @@
                         case '4': pInfos[curr_rec_num].uNumCharactersAttackedPerSpecialAbility=4; break;
                         case 'c': pInfos[curr_rec_num].uAttackPreference|=0x0010; break;
                         case 'd': pInfos[curr_rec_num].uAttackPreference|=0x0008; break;
-                        case 'e': pInfos[curr_rec_num].uAttackPreference|=0x0100; break;
+                        case 'e': pInfos[curr_rec_num].uAttackPreference|=0x1000; break;
                         case 'f': pInfos[curr_rec_num].uAttackPreference|=0x0400; break;
                         case 'h': pInfos[curr_rec_num].uAttackPreference|=0x0800; break;
                         case 'k': pInfos[curr_rec_num].uAttackPreference|=0x0001; break;
@@ -699,55 +1073,46 @@
                         case 't': pInfos[curr_rec_num].uAttackPreference|=0x0080; break;
                         case 'w': pInfos[curr_rec_num].uAttackPreference|=0x2000; break;
                         case 'x': pInfos[curr_rec_num].uAttackPreference|=0x0200; break;
-                        case 'l':  break;
                             }
                         }
                     }
                     break;
-                    /*    case 16:
+                    case 16:
                     {
 
                     }
                     break;
                     case 17:
-                    {
-
-                    }
+                         pInfos[curr_rec_num].uAttack1Type=ParseAttackType(test_string);
                     break;
                     case 18:
                     {
-
+                    ParseDamage(test_string, &pInfos[curr_rec_num].uAttack1DamageDiceRolls,
+                                             &pInfos[curr_rec_num].uAttack1DamageDiceSides,
+                                             &pInfos[curr_rec_num].uAttack1DamageBonus);
                     }
                     break;
-                    case 19:
-                    {
-
-                    }
+                   case 19:
+                        pInfos[curr_rec_num].uMissleAttack1Type=ParseMissleAttackType(test_string);
                     break;
                     case 20:
-                    {
-
-                    }
+                        pInfos[curr_rec_num].uAttack2Chance=atoi(test_string);
                     break;
                     case 21:
-                    {
-
-                    }
+                          pInfos[curr_rec_num].uAttack2Type=ParseAttackType(test_string);
                     break;
                     case 22:
                     {
-
+                    ParseDamage(test_string, &pInfos[curr_rec_num].uAttack2DamageDiceRolls,
+                                             &pInfos[curr_rec_num].uAttack2DamageDiceSides,
+                                             &pInfos[curr_rec_num].uAttack2DamageBonus);
                     }
                     break;
                     case 23:
-                    {
-
-                    }
+                        pInfos[curr_rec_num].uMissleAttack2Type=ParseMissleAttackType(test_string);
                     break;
                     case 24:
-                    {
-
-                    }
+                         pInfos[curr_rec_num].uSpell1UseChance=atoi(test_string);
                     break;
                     case 25:
                     {
@@ -755,9 +1120,7 @@
                     }
                     break;
                     case 26:
-                    {
-
-                    }
+                        pInfos[curr_rec_num].uSpell2UseChance=atoi(test_string);
                     break;
                     case 27:
                     {
@@ -766,59 +1129,89 @@
                     break;
                     case 28:
                     {
-
+                    if (tolower(test_string[0])=='i')
+                        pInfos[curr_rec_num].uResFire=200;
+                    else
+                        pInfos[curr_rec_num].uResFire=atoi(test_string);
                     }
                     break;
                     case 29:
                     {
-
+                    if (tolower(test_string[0])=='i')
+                        pInfos[curr_rec_num].uResAir=200;
+                    else
+                        pInfos[curr_rec_num].uResAir=atoi(test_string);
                     }
                     break;
                     case 30:
                     {
-
+                    if (tolower(test_string[0])=='i')
+                        pInfos[curr_rec_num].uResWater=200;
+                    else
+                        pInfos[curr_rec_num].uResWater=atoi(test_string);
                     }
                     break;
                     case 31:
                     {
-
+                    if (tolower(test_string[0])=='i')
+                        pInfos[curr_rec_num].uResEarth=200;
+                    else
+                        pInfos[curr_rec_num].uResEarth=atoi(test_string);
                     }
                     break;
                     case 32:
                     {
-
+                    if (tolower(test_string[0])=='i')
+                        pInfos[curr_rec_num].uResMind=200;
+                    else
+                        pInfos[curr_rec_num].uResMind=atoi(test_string);
                     }
                     break;
                     case 33:
                     {
-
+                    if (tolower(test_string[0])=='i')
+                        pInfos[curr_rec_num].uResSpirit=200;
+                    else
+                        pInfos[curr_rec_num].uResSpirit=atoi(test_string);
                     }
                     break;
                     case 34:
                     {
-
+                    if (tolower(test_string[0])=='i')
+                        pInfos[curr_rec_num].uResBody=200;
+                    else
+                        pInfos[curr_rec_num].uResBody=atoi(test_string);
                     }
                     break;
                     case 35:
                     {
-
+                    if (tolower(test_string[0])=='i')
+                        pInfos[curr_rec_num].uResLight=200;
+                    else
+                        pInfos[curr_rec_num].uResLight=atoi(test_string);
                     }
                     break;
                     case 36:
                     {
-
+                    if (tolower(test_string[0])=='i')
+                        pInfos[curr_rec_num].uResDark=200;
+                    else
+                        pInfos[curr_rec_num].uResDark=atoi(test_string);
                     }
                     break;
                     case 37:
                     {
-
+                    if (tolower(test_string[0])=='i')
+                        pInfos[curr_rec_num].uResPhysical=200;
+                    else
+                        pInfos[curr_rec_num].uResPhysical=atoi(test_string);
                     }
                     break;
                     case 38:
                     {
 
                     }
-                    break;   */  
+                    break;     
                     }
                 }
             else
--- a/Outdoor.cpp	Sun Mar 17 12:47:19 2013 +0400
+++ b/Outdoor.cpp	Sun Mar 17 18:31:54 2013 +0400
@@ -3158,7 +3158,7 @@
 		v36 = actor->pMonsterInfo.uID;
         v28->field_1E = v62 | 0x200;
         v28->pSpriteFrame = v15;
-        v28->uTintColor = *((int *)&v35[v36] - 36);
+        v28->uTintColor = pMonsterList->pMonsters[actor->pMonsterInfo.uID-1].uTintColor;//*((int *)&v35[v36] - 36);
         if (actor->pActorBuffs[ACTOR_BUFF_STONED].uExpireTime)
           v28->field_1E = v62 | 0x200;
       }
--- a/mm7_2.cpp	Sun Mar 17 12:47:19 2013 +0400
+++ b/mm7_2.cpp	Sun Mar 17 18:31:54 2013 +0400
@@ -7002,436 +7002,6 @@
   }
 }
 
-//----- (004548E2) --------------------------------------------------------
-unsigned int __fastcall ParseSpellType(FrameTableTxtLine *a1, int a2)
-{
-  int v2; // edi@1
-  int v3; // esi@1
-  unsigned int result; // eax@1
-  std::string v5; // [sp-18h] [bp-28h]@75
-  const char *v6; // [sp-8h] [bp-18h]@75
-  signed int v7; // [sp-4h] [bp-14h]@3
-  std::string *v8; // [sp+8h] [bp-8h]@75
-  int a3; // [sp+Fh] [bp-1h]@75
-
-  v2 = (int)a1;
-  v3 = a2;
-  result = (int)a1->pProperties[0];
-  if ( result )
-  {
-    if ( !_strcmpi((const char *)result, "Dispel") )
-    {
-      v7 = 80;
-LABEL_71:
-      result = v7;
-LABEL_76:
-      ++*(int *)v3;
-      return result;
-    }
-    if ( _strcmpi(*(const char **)(v2 + 4), "Day") )
-    {
-      if ( _strcmpi(*(const char **)(v2 + 4), "Hour") )
-      {
-        if ( _strcmpi(*(const char **)(v2 + 4), "Shield") )
-        {
-          if ( !_strcmpi(*(const char **)(v2 + 4), "Spirit") )
-          {
-            v7 = 52;
-            goto LABEL_71;
-          }
-          if ( !_strcmpi(*(const char **)(v2 + 4), "Power") )
-          {
-            v7 = 77;
-            goto LABEL_71;
-          }
-          if ( !_strcmpi(*(const char **)(v2 + 4), "Meteor") )
-          {
-            v7 = 9;
-            goto LABEL_71;
-          }
-          if ( !_strcmpi(*(const char **)(v2 + 4), "Lightning") )
-          {
-            v7 = 18;
-            goto LABEL_71;
-          }
-          if ( _strcmpi(*(const char **)(v2 + 4), "Implosion") )
-          {
-            if ( !_strcmpi(*(const char **)(v2 + 4), "Stone") )
-            {
-              v7 = 38;
-              goto LABEL_71;
-            }
-            if ( _strcmpi(*(const char **)(v2 + 4), "Haste") )
-            {
-              if ( _strcmpi(*(const char **)(v2 + 4), "Heroism") )
-              {
-                if ( !_strcmpi(*(const char **)(v2 + 4), "Pain") )
-                {
-                  v7 = 95;
-                  goto LABEL_71;
-                }
-                if ( _strcmpi(*(const char **)(v2 + 4), "Sparks") )
-                {
-                  if ( !_strcmpi(*(const char **)(v2 + 4), "Light") )
-                  {
-                    v7 = 78;
-                    goto LABEL_71;
-                  }
-                  if ( !_strcmpi(*(const char **)(v2 + 4), "Toxic") )
-                  {
-                    v7 = 90;
-                    goto LABEL_71;
-                  }
-                  if ( _strcmpi(*(const char **)(v2 + 4), "ShrapMetal") )
-                  {
-                    if ( _strcmpi(*(const char **)(v2 + 4), "Paralyze") )
-                    {
-                      if ( _strcmpi(*(const char **)(v2 + 4), "Fireball") )
-                      {
-                        if ( _strcmpi(*(const char **)(v2 + 4), "Incinerate") )
-                        {
-                          if ( !_strcmpi(*(const char **)(v2 + 4), "Fire") )
-                          {
-                            v7 = 2;
-                            goto LABEL_71;
-                          }
-                          if ( !_strcmpi(*(const char **)(v2 + 4), "Rock") )
-                          {
-                            v7 = 41;
-                            goto LABEL_71;
-                          }
-                          if ( !_strcmpi(*(const char **)(v2 + 4), "Mass") )
-                          {
-                            v7 = 44;
-                            goto LABEL_71;
-                          }
-                          if ( !_strcmpi(*(const char **)(v2 + 4), "Ice") )
-                          {
-                            v7 = 26;
-                            goto LABEL_71;
-                          }
-                          if ( !_strcmpi(*(const char **)(v2 + 4), "Acid") )
-                          {
-                            v7 = 29;
-                            goto LABEL_71;
-                          }
-                          if ( _strcmpi(*(const char **)(v2 + 4), "Bless") )
-                          {
-                            if ( !_strcmpi(*(const char **)(v2 + 4), "Dragon") )
-                            {
-                              v7 = 97;
-                              goto LABEL_71;
-                            }
-                            if ( _strcmpi(*(const char **)(v2 + 4), "Reanimate") )
-                            {
-                              if ( !_strcmpi(*(const char **)(v2 + 4), "Summon") )
-                              {
-                                v7 = 82;
-                                goto LABEL_71;
-                              }
-                              if ( _strcmpi(*(const char **)(v2 + 4), "Fate") )
-                              {
-                                if ( _strcmpi(*(const char **)(v2 + 4), "Harm") )
-                                {
-                                  if ( !_strcmpi(*(const char **)(v2 + 4), "Mind") )
-                                  {
-                                    v7 = 57;
-                                    goto LABEL_71;
-                                  }
-                                  if ( _strcmpi(*(const char **)(v2 + 4), "Blades") )
-                                  {
-                                    if ( !_strcmpi(*(const char **)(v2 + 4), "Psychic") )
-                                    {
-                                      v7 = 65;
-                                      goto LABEL_71;
-                                    }
-                                    if ( _strcmpi(*(const char **)(v2 + 4), "Hammerhands") )
-                                    {
-                                      sprintf(pTmpBuf, "Unknown monster spell %s", *(int *)(v2 + 4));
-                                      MessageBoxA(nullptr, pTmpBuf, "E:\\WORK\\MSDEV\\MM7\\MM7\\Code\\Itemdata.cpp:1562", 0);
-                                      result = 0;
-                                      goto LABEL_76;
-                                    }
-                                    v7 = 73;
-                                  }
-                                  else
-                                  {
-                                    v7 = 39;
-                                  }
-                                }
-                                else
-                                {
-                                  v7 = 70;
-                                }
-                              }
-                              else
-                              {
-                                v7 = 47;
-                              }
-                            }
-                            else
-                            {
-                              v7 = 89;
-                            }
-                          }
-                          else
-                          {
-                            v7 = 46;
-                          }
-                        }
-                        else
-                        {
-                          v7 = 11;
-                        }
-                      }
-                      else
-                      {
-                        v7 = 6;
-                      }
-                    }
-                    else
-                    {
-                      v7 = 81;
-                    }
-                  }
-                  else
-                  {
-                    v7 = 93;
-                  }
-                }
-                else
-                {
-                  v7 = 15;
-                }
-              }
-              else
-              {
-                v7 = 51;
-              }
-            }
-            else
-            {
-              v7 = 5;
-            }
-          }
-          else
-          {
-            v7 = 20;
-          }
-        }
-        else
-        {
-          v7 = 17;
-        }
-        return v7;
-      }
-      v7 = 86;
-    }
-    else
-    {
-      v7 = 85;
-    }
-    *(int *)v3 += 2;
-    result = v7;
-  }
-  return result;
-}
-
-//----- (00454CB4) --------------------------------------------------------
-int __thiscall ParseAttackType(unsigned __int8 *a1)
-{
-  unsigned __int8 *v1; // esi@1
-  int result; // eax@4
-  int v3; // eax@15
-  int v4; // eax@18
-
-  v1 = a1;
-  if ( !a1 )
-    return 4;
-  if ( tolower(*a1) == 'f' )
-    return 0;
-  if ( tolower(*v1) == 'a' )
-    return 1;
-  if ( tolower(*v1) == 'w' )
-    return 2;
-  if ( tolower(*v1) == 'e' )
-  {
-    tolower(v1[1]);
-    return 3;
-  }
-  if ( tolower(*v1) == 's' )
-    return 6;
-  if ( tolower(*v1) == 'm' )
-  {
-    v3 = -(tolower(v1[1]) != 'i');
-    LOBYTE(v3) = v3 & 0xFE;
-    result = v3 + 7;
-  }
-  else
-  {
-    if ( tolower(*v1) == 'l' )
-      return 9;
-    v4 = -(tolower(*v1) != 'd');
-    LOBYTE(v4) = v4 & 0xFA;
-    result = v4 + 10;
-  }
-  return result;
-}
-
-//----- (00454D7D) --------------------------------------------------------
-char __fastcall ParseDamage(const char *Str, int a2, int a3, int a4)
-{
-  int v4; // esi@1
-  const char *v5; // edi@1
-  signed int v6; // ebx@1
-  int *v7; // esi@2
-  int v8; // eax@3
-  size_t v10; // [sp+Ch] [bp-Ch]@1
-  int v11; // [sp+10h] [bp-8h]@1
-  signed int v12; // [sp+14h] [bp-4h]@1
-
-  v4 = a2;
-  v5 = Str;
-  *(char *)a2 = 0;
-  *(char *)a3 = 1;
-  v11 = a2;
-  *(char *)a4 = 0;
-  v6 = 0;
-  v10 = strlen(Str);
-  v12 = 0;
-  if ( (signed int)v10 <= 0 )
-  {
-LABEL_9:
-    LOBYTE(v8) = *v5;
-    if ( (unsigned __int8)*v5 >= 0x30u && (unsigned __int8)v8 <= 0x39u )
-    {
-      *(char *)v4 = atoi(v5);
-      LOBYTE(v8) = a3;
-      *(char *)a3 = 1;
-    }
-    return v8;
-  }
-  do
-  {
-    v7 = (int *)&v5[v6];
-    if ( tolower((unsigned __int8)v5[v6]) == 100 )
-    {
-      *(char *)v7 = 0;
-      *(char *)v11 = atoi(v5);
-      LOBYTE(v8) = atoi(&v5[v6 + 1]);
-      v12 = 1;
-      *(char *)a3 = v8;
-      *(char *)v7 = 100;
-    }
-    else
-    {
-      v8 = tolower(*(char *)v7);
-      if ( v8 == 43 )
-      {
-        LOBYTE(v8) = atoi(&v5[v6 + 1]);
-        *(char *)a4 = v8;
-      }
-    }
-    ++v6;
-  }
-  while ( v6 < (signed int)v10 );
-  if ( !v12 )
-  {
-    v4 = v11;
-    goto LABEL_9;
-  }
-  return v8;
-}
-
-//----- (00454E3A) --------------------------------------------------------
-int __fastcall ParseMissleAttackType(const char *Str1)
-{
-  const char *v1; // esi@1
-  int v2; // edi@1
-  int v4; // [sp-4h] [bp-Ch]@4
-
-  v1 = Str1;
-  v2 = 0;
-  if ( _strcmpi(Str1, "ARROW") )
-  {
-    if ( _strcmpi(v1, "ARROWF") )
-    {
-      if ( _strcmpi(v1, "FIRE") )
-      {
-        if ( _strcmpi(v1, "AIR") )
-        {
-          if ( _strcmpi(v1, "WATER") )
-          {
-            if ( _strcmpi(v1, "EARTH") )
-            {
-              if ( _strcmpi(v1, "SPIRIT") )
-              {
-                if ( _strcmpi(v1, "MIND") )
-                {
-                  if ( _strcmpi(v1, "BODY") )
-                  {
-                    if ( _strcmpi(v1, "LIGHT") )
-                    {
-                      if ( _strcmpi(v1, "DARK") )
-                      {
-                        if ( _strcmpi(v1, "ENER") )
-                          return v2;
-                        v4 = 13;
-                      }
-                      else
-                      {
-                        v4 = 11;
-                      }
-                    }
-                    else
-                    {
-                      v4 = 10;
-                    }
-                  }
-                  else
-                  {
-                    v4 = 9;
-                  }
-                }
-                else
-                {
-                  v4 = 8;
-                }
-              }
-              else
-              {
-                v4 = 7;
-              }
-            }
-            else
-            {
-              v4 = 6;
-            }
-          }
-          else
-          {
-            v4 = 5;
-          }
-        }
-        else
-        {
-          v4 = 4;
-        }
-      }
-      else
-      {
-        v4 = 3;
-      }
-    }
-    else
-    {
-      v4 = 2;
-    }
-    return v4;
-  }
-  return 1;
-}
-
 
 
 
--- a/mm7_data.h	Sun Mar 17 12:47:19 2013 +0400
+++ b/mm7_data.h	Sun Mar 17 18:31:54 2013 +0400
@@ -2073,10 +2073,7 @@
 // int __cdecl crt_452B74();
 int __cdecl j_SetSomeItemsNames();
 
-unsigned int __fastcall ParseSpellType(struct FrameTableTxtLine *, int a2);
-int __thiscall ParseAttackType(unsigned __int8 *_this);
-char __fastcall ParseDamage(const char *Str, int a2, int a3, int a4);
-int __fastcall ParseMissleAttackType(const char *Str1);
+
 unsigned int __fastcall SkillToMastery(unsigned __int16 a1);
 unsigned int __fastcall GetSpellColor(signed int a1);
 void *__thiscall unknown_vdtor_6(void *_this, bool a2);