int MaxAppearanceIndex(object oItem, int nPart, int nColor)
{
    int nMax1;
    int nMax2;
    int nMax3;
    int nMax4;
    int nMax5;
    int nMax6;
    int nMin = 1;
    int nMax;
    int nTotal = 0;
    int nColors = 0;
    switch (GetBaseItemType(oItem))
    {
    case BASE_ITEM_BOLT: { nMax1 = 3; nMax2 = 6; nMax3 = 3; nColors = 4; } break;
    case BASE_ITEM_ARROW: { nTotal = 3; nMax4 = 7; nMax5 = 1; nMax6 = 7; } break;
    case BASE_ITEM_LONGBOW: { nTotal = 8; nColors = 4; } break;
    case BASE_ITEM_SHORTBOW: { nTotal = 6; nColors = 4; } break;
    case BASE_ITEM_HEAVYCROSSBOW: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_LIGHTCROSSBOW: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_HALBERD: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_SCYTHE: { nTotal = 3; nColors = 4; } break;
    case BASE_ITEM_TRIDENT: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_SHORTSPEAR: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_MAGICSTAFF: { nTotal = 6; nColors = 4; } break;
    case BASE_ITEM_KAMA: { nTotal = 1; nColors = 4; } break;
    case BASE_ITEM_KUKRI: { nTotal = 1; nColors = 4; } break;
    case BASE_ITEM_SICKLE: { nTotal = 1; nColors = 4; } break;
    case BASE_ITEM_THROWINGAXE: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_LIGHTMACE: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_HEAVYFLAIL: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_LIGHTFLAIL: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_CLUB: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_LIGHTHAMMER: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_WARHAMMER: { nTotal = 6; nColors = 4; } break;
    case BASE_ITEM_MORNINGSTAR: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_QUARTERSTAFF: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_TWOBLADEDSWORD: { nTotal = 3; nColors = 4; } break;
    case BASE_ITEM_DOUBLEAXE: { nTotal = 3; nColors = 4; } break;
    case BASE_ITEM_DIREMACE: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_LONGSWORD: { nTotal = 10; nColors = 4; } break;
    case BASE_ITEM_KATANA: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_RAPIER: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_SCIMITAR: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_SHORTSWORD: { nTotal = 6; nColors = 4; } break;
    case BASE_ITEM_BASTARDSWORD: { nTotal = 6; nColors = 4; } break;
    case BASE_ITEM_DAGGER: { nTotal = 6; nColors = 4; } break;
    case BASE_ITEM_GREATSWORD: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_BATTLEAXE: { nTotal = 6; nColors = 4; } break;
    case BASE_ITEM_HANDAXE: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_GREATAXE: { nTotal = 4; nColors = 4; } break;
    case BASE_ITEM_BULLET: { nMax = 8; } break;
    case BASE_ITEM_SHURIKEN: { nMax = 3; } break;
    case BASE_ITEM_DART: { nMax = 3; } break;
    case BASE_ITEM_SLING: { nMax = 16; } break;
    }
    if (nTotal != 0) {nMax1 = nTotal; nMax2 = nTotal; nMax3 = nTotal; }
    if (nColors != 0) {nMax4 = nColors; nMax5 = nColors; nMax6 = nColors; }

    if (nColor == TRUE)
    {
    switch (nPart)
    {
    case ITEM_APPR_WEAPON_COLOR_TOP: { nMax = nMax4; } break;
    case ITEM_APPR_WEAPON_COLOR_MIDDLE: { nMax = nMax5; } break;
    case ITEM_APPR_WEAPON_COLOR_BOTTOM: { nMax = nMax6; } break;
    }
    }
    else
    {
    switch (nPart)
    {
    case ITEM_APPR_WEAPON_MODEL_TOP: { nMax = nMax1; } break;
    case ITEM_APPR_WEAPON_MODEL_MIDDLE: { nMax = nMax2; } break;
    case ITEM_APPR_WEAPON_MODEL_BOTTOM: { nMax = nMax3; } break;
    }
    }

    return nMax;
}


object ModifiedItem(object oItem, int nType, int nPart, int nColor)
    {
     int nFinalApp = MaxAppearanceIndex(oItem, nPart, nColor); //ITEM_APPR_WEAPON_MODEL_TOP
     int nCurrentApp = GetItemAppearance(oItem, nType, nPart);
     int nNextApp;
     if (nCurrentApp >= nFinalApp) nNextApp = 1;
     else nNextApp = nCurrentApp+1;
     object oNewItem = CopyItemAndModify(oItem, nType, nPart, nNextApp, TRUE);
     SetItemCursedFlag(oNewItem, TRUE);
     if (oNewItem != OBJECT_INVALID) {DestroyObject(oItem); return oNewItem;}
     else return oItem;
    }

/*object ModifiedArmor(object oItem, int nPart)
    {
     int nCurrentApp = GetItemAppearance(oItem, ITEM_APPR_TYPE_ARMOR_MODEL , nPart);
     siwtch (nCurrentApp)
     {
     case
     }
     int nNextApp;
     if (nCurrentApp >= nFinalApp) nNextApp = 1;
     else nNextApp = nCurrentApp+1;
     object oNewItem = CopyItemAndModify(oItem, nType, nPart, nNextApp, TRUE);
     SetItemCursedFlag(oNewItem, TRUE);
     if (oNewItem != OBJECT_INVALID) {DestroyObject(oItem); return oNewItem;}
     else return oItem;
    }              */