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)
Esempio n. 2
0
    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)
Esempio n. 5
0
    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']))
Esempio n. 6
0
    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
Esempio n. 7
0
 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]))
Esempio n. 8
0
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]
Esempio n. 9
0
    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
Esempio n. 10
0
 def restoreKnows(self, knows):
     if isKnows(knows):
         self._createKnowsFunction(knows)
         Cache.reset()
     else:
         raise ValueError("Invalid knows " + str(knows))
Esempio n. 11
0
 def changeKnows(self, knows, newVal):
     if isKnows(knows):
         self._setKnowsFunction(knows, newVal)
         Cache.reset()
     else:
         raise ValueError("Invalid knows " + str(knows))
Esempio n. 12
0
 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)