def prepareFirstPhase(self): self.changedKnows = {} # forces IceZebSkip if necessary to finish with 10-10-5 if Knows.IceZebSkip.bool == False or Knows.IceZebSkip.difficulty > self.maxDiff: self.changedKnows['IceZebSkip'] = Knows.IceZebSkip Knows.IceZebSkip = SMBool(True, 0, []) # hack knows to remove those > maxDiff for attr,k in Knows.__dict__.items(): if isKnows(attr) and k.bool == True and k.difficulty > self.maxDiff: self.log.debug("prepareFirstPhase. disabling knows "+attr) self.changedKnows[attr] = k setattr(Knows, attr, SMBool(False, 0)) # set max diff to god (for hard rooms/hellruns/bosses) self.settings.maxDiff = god # prepare 1st phase container itemCond = isChozoItem locCond = lambda loc: loc.isChozo() or loc.isBoss() # this will create a new smbm with new knows functions cont = self.baseContainer.slice(itemCond, locCond) secondPhaseItems = [item for item in self.baseContainer.itemPool if item not in cont.itemPool] contLocs = self.baseContainer.extractLocs(cont.unusedLocations) secondPhaseLocs = [loc for loc in self.baseContainer.unusedLocations if loc not in contLocs] self.log.debug("prepareFirstPhase. secondPhaseItems="+getItemListStr(secondPhaseItems)) self.log.debug("prepareFirstPhase. secondPhaseLocs="+getLocListStr(secondPhaseLocs)) self.secondPhaseContainer = ItemLocContainer(cont.sm, secondPhaseItems, secondPhaseLocs) return self.fillerFactory.createFirstPhaseFiller(cont)
def load(self): # update the parameters in the parameters classes: Knows, Settings # Knows for param in self.params['Knows']: if isKnows(param) and hasattr(Knows, param): setattr( Knows, param, SMBool(self.params['Knows'][param][0], self.params['Knows'][param][1], ['{}'.format(param)])) # Settings ## hard rooms for hardRoom in ['X-Ray', 'Gauntlet']: if hardRoom in self.params['Settings']: Settings.hardRooms[hardRoom] = Settings.hardRoomsPresets[ hardRoom][self.params['Settings'][hardRoom]] ## bosses for boss in ['Kraid', 'Phantoon', 'Draygon', 'Ridley', 'MotherBrain']: if boss in self.params['Settings']: Settings.bossesDifficulty[ boss] = Settings.bossesDifficultyPresets[boss][ self.params['Settings'][boss]] ## hellruns for hellRun in ['Ice', 'MainUpperNorfair', 'LowerNorfair']: if hellRun in self.params['Settings']: Settings.hellRuns[hellRun] = Settings.hellRunPresets[hellRun][ self.params['Settings'][hellRun]] # Controller for button in self.params['Controller']: if isButton(button): setattr(Controller, button, self.params['Controller'][button])
def createKnowsFunctions(self): # for each knows we have a function knowsKnows (ex: knowsAlcatrazEscape()) which # take no parameter for knows in Knows.__dict__: if isKnows(knows): setattr(self, 'knows' + knows, lambda knows=knows: SMBool(Knows.__dict__[knows].bool, Knows.__dict__[knows]. difficulty, knows=[knows]))
def getKnowsUsed(self): knowsUsed = [] for loc in self.visitedLocations: knowsUsed += loc.difficulty.knows # get unique knows knowsUsed = list(set(knowsUsed)) knowsUsedCount = len(knowsUsed) # get total of known knows knowsKnownCount = len([knows for knows in Knows.__dict__ if isKnows(knows) and getattr(Knows, knows).bool == True]) knowsKnownCount += len([hellRun for hellRun in Settings.hellRuns if Settings.hellRuns[hellRun] is not None]) return (knowsUsedCount, knowsKnownCount, knowsUsed)
def printToScreen(self): print("self.params: {}".format(self.params)) print("loaded knows: ") for knows in Knows.__dict__: if isKnows(knows): print("{}: {}".format(knows, Knows.__dict__[knows])) print("loaded settings:") for setting in Settings.__dict__: if isSettings(setting): print("{}: {}".format(setting, Settings.__dict__[setting])) print("loaded controller:") for button in Controller.__dict__: if isButton(button): print("{}: {}".format(button, Controller.__dict__[button])) print("loaded score: {}".format(self.params['score']))
def genJsonFromParams(self, vars): paramsDict = {'Knows': {}, 'Settings': {}, 'Controller': {}} # Knows for var in Knows.__dict__: if isKnows(var): boolVar = vars[var + "_bool"] if boolVar is None: paramsDict['Knows'][var] = [False, 0] else: diffVar = vars[var + "_diff"] if diffVar is not None: paramsDict['Knows'][var] = [True, text2diff[diffVar]] # Settings for hellRun in ['Ice', 'MainUpperNorfair', 'LowerNorfair']: value = vars[hellRun] if value is not None: paramsDict['Settings'][hellRun] = value for boss in ['Kraid', 'Phantoon', 'Draygon', 'Ridley', 'MotherBrain']: value = vars[boss] if value is not None: paramsDict['Settings'][boss] = value for room in ['X-Ray', 'Gauntlet']: value = vars[room] if value is not None: paramsDict['Settings'][room] = value # Controller for button in Controller.__dict__: if isButton(button): value = vars[button] if value is None: paramsDict['Controller'][button] = Controller.__dict__[ button] else: if button == "Moonwalk": if value != None and value == "on": paramsDict['Controller'][button] = True else: paramsDict['Controller'][button] = False else: paramsDict['Controller'][button] = value return paramsDict
def createKnowsFunctions(self, player): # for each knows we have a function knowsKnows (ex: knowsAlcatrazEscape()) which # take no parameter for knows in Knows.__dict__: if isKnows(knows): if player in Knows.knowsDict and knows in Knows.knowsDict[ player].__dict__: setattr( self, 'knows' + knows, lambda knows=knows: SMBool( Knows.knowsDict[player].__dict__[knows].bool, Knows.knowsDict[player].__dict__[knows].difficulty, knows=[knows])) else: # if knows not in preset, use default values setattr(self, 'knows' + knows, lambda knows=knows: SMBool( Knows.__dict__[knows].bool, Knows.__dict__[knows].difficulty, knows=[knows]))
def completePreset(params): # add missing knows for know in Knows.__dict__: if isKnows(know): if know not in params['Knows'].keys(): params['Knows'][know] = Knows.__dict__[know] # add missing settings for boss in ['Kraid', 'Phantoon', 'Draygon', 'Ridley', 'MotherBrain']: if boss not in params['Settings']: params['Settings'][boss] = 'Default' for hellrun in ['Ice', 'MainUpperNorfair', 'LowerNorfair']: if hellrun not in params['Settings']: params['Settings'][hellrun] = 'Default' for hardroom in ['X-Ray', 'Gauntlet']: if hardroom not in params['Settings']: params['Settings'][hardroom] = 'Default' # add missing controller buttons for button in Controller.__dict__: if isButton(button): if button not in params['Controller'].keys(): params['Controller'][button] = Controller.__dict__[button]
def computeScore(self): # the more techniques you know and the smaller the difficulty of the techniques, the higher the score diff2score = { easy: 6, medium: 5, hard: 4, harder: 3, hardcore: 2, mania: 1 } boss2score = { "He's annoying": 1, 'A lot of trouble': 1, "I'm scared!": 1, "It can get ugly": 1, 'Default': 2, 'Quick Kill': 3, 'Used to it': 3, 'Is this really the last boss?': 3, 'No problemo': 4, 'Piece of cake': 4, 'Nice cutscene bro': 4 } hellrun2score = { 'No thanks': 0, 'Solution': 0, 'Gimme energy': 2, 'Default': 4, 'Bring the heat': 6, 'I run RBO': 8 } hellrunLN2score = { 'Default': 0, 'Solution': 0, 'Bring the heat': 6, 'I run RBO': 12 } xray2score = { 'Aarghh': 0, 'Solution': 0, "I don't like spikes": 1, 'Default': 2, "I don't mind spikes": 3, 'D-Boost master': 4 } gauntlet2score = {'Aarghh': 0, "I don't like acid": 1, 'Default': 2} score = 0 # knows for know in Knows.__dict__: if isKnows(know): if know in self.params['Knows']: if self.params['Knows'][know][0] == True: score += diff2score[self.params['Knows'][know][1]] else: # if old preset with not all the knows, use default values for the know if Knows.__dict__[know].bool == True: score += diff2score[Knows.__dict__[know].difficulty] # hard rooms hardRoom = 'X-Ray' if hardRoom in self.params['Settings']: score += xray2score[self.params['Settings'][hardRoom]] hardRoom = 'Gauntlet' if hardRoom in self.params['Settings']: score += gauntlet2score[self.params['Settings'][hardRoom]] # bosses for boss in ['Kraid', 'Phantoon', 'Draygon', 'Ridley', 'MotherBrain']: if boss in self.params['Settings']: score += boss2score[self.params['Settings'][boss]] # hellruns for hellRun in ['Ice', 'MainUpperNorfair']: if hellRun in self.params['Settings']: score += hellrun2score[self.params['Settings'][hellRun]] hellRun = 'LowerNorfair' if hellRun in self.params['Settings']: score += hellrunLN2score[self.params['Settings'][hellRun]] return score
def restoreKnows(self, knows): if isKnows(knows): self._createKnowsFunction(knows) Cache.reset() else: raise ValueError("Invalid knows " + str(knows))
def changeKnows(self, knows, newVal): if isKnows(knows): self._setKnowsFunction(knows, newVal) Cache.reset() else: raise ValueError("Invalid knows " + str(knows))
def createKnowsFunctions(self): # for each knows we have a function knowsKnows (ex: knowsAlcatrazEscape()) which # take no parameter for knows in Knows.__dict__: if isKnows(knows): self._createKnowsFunction(knows)