def getForbiddenItemsFromList(self, itemList): self.log.debug('getForbiddenItemsFromList: ' + str(itemList)) remove = [] n = randGaussBounds(len(itemList)) for i in range(n): idx = random.randint(0, len(itemList) - 1) item = itemList.pop(idx) if item is not None: remove.append(item) return remove
def __init__(self, itemManager, qty, sm, maxDiff): super(ItemPoolGeneratorMajors, self).__init__(itemManager, qty, sm, maxDiff) self.sparseRest = 1 + randGaussBounds(2, 5) self.mediumRest = 3 + randGaussBounds(4, 3.7) self.ultraSparseNoTanks = self.isUltraSparseNoTanks()
def addEnergy(self): total = 18 energyQty = self.qty['energy'] if energyQty == 'ultra sparse': # 0-1, remove reserve tank and two etanks, check if it also remove the last etank self.itemManager.removeItem('Reserve') self.itemManager.addItem('NoEnergy', 'Chozo') self.itemManager.removeItem('ETank') self.itemManager.addItem('NoEnergy', 'Chozo') self.itemManager.removeItem('ETank') self.itemManager.addItem('NoEnergy', 'Chozo') if self.isUltraSparseNoTanks(): # no etank nor reserve self.itemManager.removeItem('ETank') self.itemManager.addItem('NoEnergy', 'Chozo') elif random.random() < 0.5: # replace only etank with reserve self.itemManager.removeItem('ETank') self.itemManager.addItem('Reserve', 'Chozo') # complete up to 18 energies with nothing item alreadyInPool = 4 for i in range(total - alreadyInPool): self.itemManager.addItem('Nothing', 'Minor') elif energyQty == 'sparse': # 4-6 # already 3E and 1R alreadyInPool = 4 rest = randGaussBounds(2, 5) if rest >= 1: if random.random() < 0.5: self.itemManager.addItem('Reserve', 'Minor') else: self.itemManager.addItem('ETank', 'Minor') for i in range(rest - 1): self.itemManager.addItem('ETank', 'Minor') # complete up to 18 energies with nothing item for i in range(total - alreadyInPool - rest): self.itemManager.addItem('Nothing', 'Minor') elif energyQty == 'medium': # 8-12 # add up to 3 Reserves or ETanks (cannot add more than 3 reserves) for i in range(3): if random.random() < 0.5: self.itemManager.addItem('Reserve', 'Minor') else: self.itemManager.addItem('ETank', 'Minor') # 7 already in the pool (3 E, 1 R, + the previous 3) alreadyInPool = 7 rest = 1 + randGaussBounds(4, 3.7) for i in range(rest): self.itemManager.addItem('ETank', 'Minor') # fill the rest with NoEnergy for i in range(total - alreadyInPool - rest): self.itemManager.addItem('Nothing', 'Minor') else: # add the vanilla 3 reserves and 13 Etanks for i in range(3): self.itemManager.addItem('Reserve', 'Minor') for i in range(11): self.itemManager.addItem('ETank', 'Minor')
isVanilla = random.random() < 0.5 strictMinors = bool(random.getrandbits(1)) minQty = 100 energyQty = 'vanilla' forbidden = [] if not isVanilla: minQty = random.randint(1, 99) r = random.random() if r < 0.33: energyQty = 'medium' elif r > 0.66: energyQty = 'sparse' else: energyQty = 'ultra sparse' funPick = fun[:] for i in range(randGaussBounds(len(fun))): item = random.choice(funPick) forbidden.append(item) funPick.remove(item) nLocs = 105 if random.random() < 0.25: nLocs = random.randint(40, 80) missProb = random.randint(1, 9) superProb = random.randint(1, 9) pbProb = random.randint(1, 9) qty = { 'minors': minQty, 'energy': energyQty, 'ammo': { 'Missile': missProb, 'Super': superProb,