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(); }
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")); }