Esempio n. 1
0
        private void ReplaceTreasures(IEnumerable <Item> items)
        {
            var treasures = new TreasureData(rom);

            treasures.LoadTable();

            var pool1 = GetLegendaryPool();
            var pool2 = ItemLists.RareWeaponTier.Concat(ItemLists.RareArmorTier).Where(i => !pool1.Contains(i)).ToList();
            var pool3 = ItemLists.CommonArmorTier.Concat(ItemLists.CommonWeaponTier).ToList();

            var hqPool = new HashSet <Item>(pool1.Concat(pool2));

            items = items.Where(i => hqPool.Contains(i)).ToArray();

            foreach (var i in items)
            {
                var indices = treasures.Data.Select((item, idx) => (item, idx)).Where(e => e.item == i).ToList();
                if (indices.Count > 0)
                {
                    var idx = indices.PickRandom(rng).idx;
                    treasures[idx] = ExtConsumables.ExtConsumableStartingEquipmentFix(pool3.PickRandom(rng), flags);
                }
            }

            treasures.StoreTable();
        }
Esempio n. 2
0
        public void SetStartingEquipment()
        {
            var items = GetEquipment();

            ExtConsumables.ExtConsumableStartingEquipmentFix(items.Weapons, flags);

            if (flags.StartingEquipmentRemoveFromPool)
            {
                ReplaceTreasures(items.Weapons.Concat(items.Armor));
            }

            for (int i = 0; i < 16; i++)
            {
                if (items.Weapons[i] > 0)
                {
                    items.Weapons[i] -= Item.Soft;
                }
                if (items.Armor[i] > 0)
                {
                    items.Armor[i] -= Item.Masamune;
                }
            }

            for (int i = 0; i < 4; i++)
            {
                byte[] buffer1 = new byte[4];
                Buffer.BlockCopy(items.Weapons, 4 * i, buffer1, 0, 4);

                byte[] buffer2 = new byte[4];
                Buffer.BlockCopy(items.Armor, 4 * i, buffer2, 0, 4);

                rom.PutInBank(0x1B, 0x8520 + 0x08 * i, buffer1);
                rom.PutInBank(0x1B, 0x8524 + 0x08 * i, buffer2);
            }

            rom.PutInBank(0x1B, 0x8540, Blob.FromHex("A200A000205785A040205785A080205785A0C020578560BD2085991861E8C898290FC908D0F160"));
        }