Change how option_identifier is calculated
This will provide more headroom before running out of space in the 32 bits of the title where this data goes.
This commit is contained in:
		
							parent
							
								
									f6f444a1d8
								
							
						
					
					
						commit
						124e3b69de
					
				| 
						 | 
				
			
			@ -252,19 +252,31 @@ class World(object):
 | 
			
		|||
 | 
			
		||||
    @property
 | 
			
		||||
    def option_identifier(self):
 | 
			
		||||
        logic = 0 if self.logic == 'noglitches' else 1
 | 
			
		||||
        mode = ['standard', 'open', 'swordless'].index(self.mode)
 | 
			
		||||
        dungeonitems = 0 if self.place_dungeon_items else 1
 | 
			
		||||
        goal = ['ganon', 'pedestal', 'dungeons', 'triforcehunt', 'crystals'].index(self.goal)
 | 
			
		||||
        shuffle = ['vanilla', 'simple', 'restricted', 'full', 'madness', 'insanity', 'dungeonsfull', 'dungeonssimple'].index(self.shuffle)
 | 
			
		||||
        difficulty = ['easy', 'normal', 'hard', 'expert', 'insane'].index(self.difficulty)
 | 
			
		||||
        timer = ['none', 'display', 'timed', 'timed-ohko', 'timed-countdown', 'ohko'].index(self.timer)
 | 
			
		||||
        progressive = ['on', 'off', 'random'].index(self.progressive)
 | 
			
		||||
        algorithm = ['freshness', 'flood', 'vt21', 'vt22', 'vt25', 'vt26', 'balanced'].index(self.algorithm)
 | 
			
		||||
        beatableonly = 1 if self.check_beatable_only else 0
 | 
			
		||||
        shuffleganon = 1 if self.shuffle_ganon else 0
 | 
			
		||||
        keysanity = 1 if self.keysanity else 0
 | 
			
		||||
        return logic | (beatableonly << 1) | (dungeonitems << 2) | (shuffleganon << 3) | (goal << 4) | (shuffle << 7) | (difficulty << 11) | (algorithm << 13) | (mode << 16) | (keysanity << 18) | (timer << 19) | (progressive << 21)
 | 
			
		||||
        id_value = 0
 | 
			
		||||
        id_value_max = 1
 | 
			
		||||
 | 
			
		||||
        def markbool(value):
 | 
			
		||||
            nonlocal id_value, id_value_max
 | 
			
		||||
            id_value += id_value_max * bool(value)
 | 
			
		||||
            id_value_max *= 2
 | 
			
		||||
        def marksequence(options, value):
 | 
			
		||||
            nonlocal id_value, id_value_max
 | 
			
		||||
            id_value += id_value_max * options.index(value)
 | 
			
		||||
            id_value_max *= len(options)
 | 
			
		||||
        markbool(self.logic == 'noglitches')
 | 
			
		||||
        marksequence(['standard', 'open', 'swordless'], self.mode)
 | 
			
		||||
        markbool(self.place_dungeon_items)
 | 
			
		||||
        marksequence(['ganon', 'pedestal', 'dungeons', 'triforcehunt', 'crystals'], self.goal)
 | 
			
		||||
        marksequence(['vanilla', 'simple', 'restricted', 'full', 'madness', 'insanity', 'dungeonsfull', 'dungeonssimple'], self.shuffle)
 | 
			
		||||
        marksequence(['easy', 'normal', 'hard', 'expert', 'insane'], self.difficulty)
 | 
			
		||||
        marksequence(['none', 'display', 'timed', 'timed-ohko', 'timed-countdown', 'ohko'], self.timer)
 | 
			
		||||
        marksequence(['on', 'off', 'random'], self.progressive)
 | 
			
		||||
        marksequence(['freshness', 'flood', 'vt21', 'vt22', 'vt25', 'vt26', 'balanced'], self.algorithm)
 | 
			
		||||
        markbool(self.check_beatable_only)
 | 
			
		||||
        markbool(self.shuffle_ganon)
 | 
			
		||||
        markbool(self.keysanity)
 | 
			
		||||
        assert id_value_max <= 0xFFFFFFFF
 | 
			
		||||
        return id_value
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class CollectionState(object):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue