Esempio n. 1
0
        /* sub_5A007 */
        internal static Item create_item(ItemType item_type)
        {
            byte var_5 = 0; /* Simeon */
            int var_4 = -1;

            Item item = new Item(0, 0, 0, 0, 0, 0, false, 6, false, 0, 0, 0, 0, 0, item_type, false);

            var type = item.type;

            if ((type >= ItemType.BattleAxe && type <= ItemType.Shield) ||
                type == ItemType.Arrow ||
                type == ItemType.Bracers ||
                type == ItemType.RingOfProt)
            {
                item.plus = randomBonus();

                if (item.type == ItemType.Javelin)
                {
                    int var_1 = ovr024.roll_dice(5, 1);
                    if (var_1 == 5)
                    {
                        var_4 = 6;
                    }

                    item.namenum3 = 0x15;
                    item.namenum2 = item.plus + 0xA1;
                }
                else if (item.type == ItemType.Quarrel)
                {
                    item.namenum3 = 0x1C;
                    item.namenum2 = item.plus + 0xA1;
                }
                else if (item.type == ItemType.LeatherArmor ||
                         item.type == ItemType.PaddedArmor)
                {
                    item.namenum3 = (int)item.type;
                    item.namenum2 = 0x31;
                    item.namenum1 = item.plus + 0xA1;
                    item.hidden_names_flag = 4;
                }
                else if (item.type == ItemType.StuddedLeather)
                {
                    item.namenum3 = (int)item.type;
                    item.namenum2 = 0x32;
                    item.namenum1 = item.plus + 0xA1;
                    item.hidden_names_flag = 4;
                }
                else if (item.type >= ItemType.RingMail &&
                         item.type <= ItemType.PlateMail)
                {
                    item.namenum3 = (int)item.type;
                    item.namenum2 = 0x30;
                    item.namenum1 = item.plus + 0xA1;
                    item.hidden_names_flag = 4;
                }
                else if (item.type == ItemType.Arrow)
                {
                    item.namenum3 = 0x3D;
                    item.namenum2 = item.plus + 0xA1;
                }
                else if (item.type == ItemType.Bracers)
                {
                    item.namenum3 = 0x4F;
                    item.namenum2 = 0xA7;
                    item.plus = (item.plus << 1) + 2;

                    if (item.plus == 4)
                    {
                        item.namenum1 = 0xdd;
                    }
                    else if (item.plus == 6)
                    {
                        item.namenum1 = 0xde;
                    }
                }
                else if (item.type == ItemType.RingOfProt)
                {
                    item.namenum3 = 0x42;
                    item.namenum2 = 0xE0;
                    item.namenum1 = item.plus + 0xA1;
                }
                else
                {
                    item.namenum3 = (int)item.type;
                    item.namenum2 = item.plus + 0xA1;
                }

                item.plus_save = 0;
                item.count = 0;

                switch (item.type)
                {
                    case ItemType.BattleAxe:
                    case ItemType.MilitaryFork:
                    case ItemType.Glaive:
                    case ItemType.BroadSword:
                        item.weight = 75;
                        break;

                    case ItemType.HandAxe: // HandAxe
                    case ItemType.Hammer:
                    case ItemType.Ranseur:
                    case ItemType.Spear:
                    case ItemType.Spetum:
                    case ItemType.QuarterStaff:
                    case ItemType.Trident:
                    case ItemType.CompositeShortBow:
                    case ItemType.ShortBow:
                    case ItemType.LightCrossbow:
                    case ItemType.Shield:
                        item.weight = 50;
                        break;

                    case ItemType.Bardiche:
                    case ItemType.MorningStar:
                    case ItemType.Voulge:
                        item.weight = 0x7D;
                        break;

                    case ItemType.BecDeCorbin:
                    case ItemType.GlaiveGuisarme:
                    case ItemType.Mace:
                    case ItemType.BastardSword:
                    case ItemType.LongBow:
                    case ItemType.HeavyCrossbow:
                    case ItemType.PaddedArmor:
                        item.weight = 100;
                        break;

                    case ItemType.BillGuisarme:
                    case ItemType.Flail:
                    case ItemType.GuisarmeVoulge:
                    case ItemType.LucernHammer:
                    case ItemType.LeatherArmor:
                        item.weight = 0x96;
                        break;

                    case ItemType.BoStick:
                        item.weight = 15;
                        break;

                    case ItemType.Club:
                        item.weight = 0x1E;
                        break;

                    case ItemType.Dagger:
                    case ItemType.Bracers:
                        item.weight = 10;
                        break;

                    case ItemType.Dart:
                        item.weight = 0x19;
                        item.count = 5;
                        break;

                    case ItemType.Fauchard:
                    case ItemType.MilitaryPick:
                    case ItemType.LongSword:
                        item.weight = 0x3C;
                        break;

                    case ItemType.FauchardFork:
                    case ItemType.Guisarme:
                    case ItemType.Partisan:
                    case ItemType.AwlPike:
                    case ItemType.CompositeLongBow:
                    case ItemType.Sling:
                        item.weight = 80;
                        break;

                    case ItemType.Halberd:
                        item.weight = 175;
                        break;

                    case ItemType.Javelin:
                        item.weight = 20;
                        break;

                    case ItemType.JoStick:
                    case ItemType.Scimitar:
                        item.weight = 40;
                        break;

                    case ItemType.ShortSword:
                        item.weight = 35;
                        break;

                    case ItemType.TwoHandedSword:
                    case ItemType.RingMail:
                        item.weight = 250;
                        break;

                    case ItemType.StuddedLeather:
                        item.weight = 0x0C8;
                        break;

                    case ItemType.ScaleMail:
                    case ItemType.SplintMail:
                        item.weight = 400;
                        break;

                    case ItemType.ChainMail:
                        item.weight = 0x12C;
                        break;

                    case ItemType.BandedMail:
                        item.weight = 0x15E;
                        break;

                    case ItemType.PlateMail:
                        item.weight = 450;
                        break;

                    //case 0x2f: //wonder if this should have been 0x3f
                    case ItemType.RingOfProt:
                        item.weight = 1;
                        break;

                    default:
                        item.weight = 40;
                        item.count = 10;
                        break;
                }

                if (item.type == ItemType.Shield)
                {
                    item._value = (short)(item.plus * 2500);
                }
                else if (item.type == ItemType.Arrow || item.type == ItemType.Quarrel)
                {
                    item._value = (short)(item.plus * 150);
                }
                else if (item.type == ItemType.RingMail || item.type == ItemType.ScaleMail)
                {
                    item._value = (short)(item.plus * 3000);
                }
                else if (item.type == ItemType.ChainMail || item.type == ItemType.SplintMail)
                {
                    item._value = (short)(item.plus * 3500);
                }
                else if (item.type == ItemType.BandedMail)
                {
                    item._value = (short)(item.plus * 4000);

                }
                else if (item.type == ItemType.PlateMail)
                {
                    item._value = (short)(item.plus * 5000);
                }
                else if (item.type == ItemType.Bracers)
                {
                    item._value = (short)(item.plus * 3000);
                }
                else
                {
                    item._value = (short)(item.plus * 2000);
                }
            }
            else if (type == ItemType.MUScroll || type == ItemType.ClrcScroll)
            {
                byte spellsCount = ovr024.roll_dice(3, 1);

                if (item.type == ItemType.MUScroll)
                {
                    item.namenum3 = 0xD1;
                }
                else
                {
                    item.namenum3 = 0xD0;
                }

                item.namenum2 = spellsCount + 0xd1;
                item.namenum1 = 0;
                item.plus = 1;
                item.weight = 0x19;
                item.count = 0;
                item._value = 0;

                for (int var_3 = 1; var_3 <= spellsCount; var_3++)
                {
                    int var_1 = ovr024.roll_dice(5, 1);

                    if (item.type == ItemType.MUScroll)
                    {
                        switch (var_1)
                        {
                            case 1:
                                var_5 = (byte)(ovr024.roll_dice(13, 1) + 8);
                                break;

                            case 2:
                                var_5 = (byte)(ovr024.roll_dice(7, 1) + 28);
                                break;

                            case 3:
                                var_5 = (byte)(ovr024.roll_dice(0x0B, 1) + 44);
                                break;

                            case 4:
                                var_5 = (byte)(ovr024.roll_dice(9, 1) + 80);
                                break;

                            case 5:
                                var_5 = (byte)(ovr024.roll_dice(4, 1) + 90);
                                break;
                        }
                    }
                    else
                    {
                        switch (var_1)
                        {
                            case 1:
                                var_5 = ovr024.roll_dice(8, 1);
                                break;

                            case 2:
                                var_5 = (byte)(ovr024.roll_dice(7, 1) + 0x15);
                                break;

                            case 3:
                                var_5 = (byte)(ovr024.roll_dice(8, 1) + 0x24);
                                break;

                            case 4:
                                var_5 = (byte)(ovr024.roll_dice(5, 1) + 0x41);
                                break;

                            case 5:
                                var_5 = (byte)(ovr024.roll_dice(6, 1) + 0x46);
                                break;
                        }
                    }

                    item.setAffect(var_3, (Affects)var_5);
                    item._value += (short)(var_1 * 300);
                }
            }
            else if (type == ItemType.Gauntlets || type == ItemType.Type_67)
            {
                var_4 = 5;
            }
            else if (type == ItemType.WandA || type == ItemType.WandB)
            {
                var_4 = 4;
            }
            else if (type == ItemType.Type_89 || type == ItemType.Cloak)
            {
                var_4 = 1;
            }
            else if (type == ItemType.Potion)
            {
                int var_1 = ovr024.roll_dice(8, 1);

                if (var_1 >= 1 && var_1 <= 5)
                {
                    var_4 = 2;
                }
                else if (var_1 >= 6 && var_1 <= 8)
                {
                    var_4 = 0;
                }
            }

            if (var_4 > -1)
            {
                item.namenum1 = preconfiiguredItems[var_4, 0];
                item.namenum2 = preconfiiguredItems[var_4, 1];
                item.namenum3 = preconfiiguredItems[var_4, 2];

                item.plus = 1;
                item.plus_save = 1;

                item.weight = preconfiiguredItems[var_4, 3];
                item.count = 0;

                item._value = preconfiiguredItems[var_4, 4];

                for (int var_3 = 1; var_3 <= 3; var_3++)
                {
                    item.setAffect(var_3, (Affects)(byte)preconfiiguredItems[var_4, 4 + var_3]);
                }
            }

            ItemLibrary.Add(item);
            return item;
        }
Esempio n. 2
0
        /* sub_623FF */
        internal static void remove_spell_from_scroll(int affect, Item item, Player player)
        {
            int affect_index = 0;

            for (int index = 1; index <= 3; index++)
            {
                if (((int)item.getAffect(index) & 0x7F) == affect)
                {
                    affect_index = index;
                }
            }

            if (affect_index != 0)
            {
                item.setAffect(affect_index, 0);
                item.namenum2 -= 1;
                if (item.namenum2 < 0xd2)
                {
                    ovr025.lose_item(item, player);
                }
            }
        }