def get_hair_key_curly_2(self, value): hair_type = PlayerAttributeOption.OPT_CURLY_2 hair_shape = PlayerAttributeOption.OPT_NA hair_front = PlayerAttributeOption.OPT_NA hair_volume = PlayerAttributeOption.OPT_NA hair_darkness = PlayerAttributeOption.OPT_NA bandana_type = PlayerAttributeOption.OPT_NA shape_1_base = 864 shape_val_count = 12 shape_base_offset_by_value = { 864: (PlayerAttributeOption.OPT_1, 0), 876: (PlayerAttributeOption.OPT_2, 1), 888: (PlayerAttributeOption.OPT_3, 2), 900: (PlayerAttributeOption.OPT_4, 3), } shape_base_offset = get_base_byte_value(value, shape_val_count) hair_shape, shape_base_multiplier = shape_base_offset_by_value[ shape_base_offset ] shape_base = shape_1_base + (shape_val_count * shape_base_multiplier) volume_by_value = { 0: PlayerAttributeOption.OPT_1, 1: PlayerAttributeOption.OPT_2, } volume_value = get_lowest_byte_value(value - (shape_base), 2) hair_volume = volume_by_value[volume_value] front_by_value = { 0: PlayerAttributeOption.OPT_1, 2: PlayerAttributeOption.OPT_2, 4: PlayerAttributeOption.OPT_3, 6: PlayerAttributeOption.OPT_4, 8: PlayerAttributeOption.OPT_5, 10: PlayerAttributeOption.OPT_6, } front_value = get_base_byte_value(value - (shape_base), 2) hair_front = front_by_value[front_value] return ( hair_type, hair_shape, hair_front, hair_volume, hair_darkness, bandana_type, )
def get_hair_key_ponytail_2(self, value): hair_type = PlayerAttributeOption.OPT_PONYTAIL_2 hair_shape = PlayerAttributeOption.OPT_NA hair_front = PlayerAttributeOption.OPT_NA hair_volume = PlayerAttributeOption.OPT_NA hair_darkness = PlayerAttributeOption.OPT_NA bandana_type = PlayerAttributeOption.OPT_NA shape_1_base = 948 shape_val_count = 12 shape_base_offset_by_value = { 948: (PlayerAttributeOption.OPT_1, 0), 960: (PlayerAttributeOption.OPT_2, 1), 972: (PlayerAttributeOption.OPT_3, 2), } shape_base_offset = get_base_byte_value(value, shape_val_count) hair_shape, shape_base_multiplier = shape_base_offset_by_value[ shape_base_offset ] shape_base = shape_1_base + (shape_val_count * shape_base_multiplier) volume_by_value = { 0: PlayerAttributeOption.OPT_1, 1: PlayerAttributeOption.OPT_2, 2: PlayerAttributeOption.OPT_3, } volume_value = get_lowest_byte_value(value - (shape_base), 3) hair_volume = volume_by_value[volume_value] front_by_value = { 0: PlayerAttributeOption.OPT_1, 3: PlayerAttributeOption.OPT_2, 6: PlayerAttributeOption.OPT_3, 9: PlayerAttributeOption.OPT_4, } front_value = get_base_byte_value(value - (shape_base), 3) hair_front = front_by_value[front_value] return ( hair_type, hair_shape, hair_front, hair_volume, hair_darkness, bandana_type, )
def get_hair_key_dreadlocks(self, value): hair_type = PlayerAttributeOption.OPT_DREADLOCKS hair_shape = PlayerAttributeOption.OPT_NA hair_front = PlayerAttributeOption.OPT_NA hair_volume = PlayerAttributeOption.OPT_NA hair_darkness = PlayerAttributeOption.OPT_NA bandana_type = PlayerAttributeOption.OPT_NA shape_1_base = 984 shape_val_count = 8 shape_base_offset_by_value = { 984: (PlayerAttributeOption.OPT_1, 0), 992: (PlayerAttributeOption.OPT_2, 1), 1000: (PlayerAttributeOption.OPT_3, 2), } shape_base_offset = get_base_byte_value(value, shape_val_count) hair_shape, shape_base_multiplier = shape_base_offset_by_value[ shape_base_offset ] shape_base = shape_1_base + (shape_val_count * shape_base_multiplier) volume_by_value = { 0: PlayerAttributeOption.OPT_1, 1: PlayerAttributeOption.OPT_2, } volume_value = get_lowest_byte_value(value - (shape_base), 2) hair_volume = volume_by_value[volume_value] front_by_value = { 0: PlayerAttributeOption.OPT_1, 2: PlayerAttributeOption.OPT_2, 4: PlayerAttributeOption.OPT_3, 6: PlayerAttributeOption.OPT_4, } front_value = get_base_byte_value(value - (shape_base), 2) hair_front = front_by_value[front_value] return ( hair_type, hair_shape, hair_front, hair_volume, hair_darkness, bandana_type, )
def get_hair_key_buzz_cut(self, value): darkness_by_value = { 0: PlayerAttributeOption.OPT_1, 1: PlayerAttributeOption.OPT_2, 2: PlayerAttributeOption.OPT_3, 3: PlayerAttributeOption.OPT_4, } darkness_value = get_lowest_byte_value(value, 4) darkness_value = darkness_by_value[darkness_value] front_by_value = { 4: PlayerAttributeOption.OPT_1, 8: PlayerAttributeOption.OPT_2, 12: PlayerAttributeOption.OPT_3, 16: PlayerAttributeOption.OPT_4, 0: PlayerAttributeOption.OPT_5, } front_value = get_lowest_byte_value(value, 20) front_value = get_base_byte_value(front_value, 4) front_value = front_by_value[front_value] shape_by_value = { 0: PlayerAttributeOption.OPT_1, 20: PlayerAttributeOption.OPT_2, 40: PlayerAttributeOption.OPT_3, 60: PlayerAttributeOption.OPT_4, } shape_value = get_base_byte_value(value - 4, 20) shape_value = shape_by_value[shape_value] hair_type = PlayerAttributeOption.OPT_BUZZ_CUT hair_shape = str(shape_value) hair_front = str(front_value) hair_volume = PlayerAttributeOption.OPT_NA hair_darkness = str(darkness_value) bandana_type = PlayerAttributeOption.OPT_NA return ( hair_type, hair_shape, hair_front, hair_volume, hair_darkness, bandana_type, )
def get_sleeve_length_label(self): value = self.get_value() value = get_base_byte_value(value, 64) # Auto sleeve length is repeated if value == 192: value = 0 return self.array_opts_sleeve_length[value]
def get_preset_face_value(self): value_100, value_101 = self.get_value() value_100 = get_base_byte_value(value_100, 32) value_100 = self.array_opts_preset_face[value_100] face_number = value_100 + (value_101 * 8) return face_number
def get_hair_key_pulled_back(self, value): hair_type = PlayerAttributeOption.OPT_PULLED_BACK hair_shape = PlayerAttributeOption.OPT_NA hair_front = PlayerAttributeOption.OPT_NA hair_volume = PlayerAttributeOption.OPT_NA hair_darkness = PlayerAttributeOption.OPT_NA bandana_type = PlayerAttributeOption.OPT_NA shape_1_base = 1008 shape_val_count = 6 shape_base_offset_by_value = { 1008: (PlayerAttributeOption.OPT_1, 0), 1014: (PlayerAttributeOption.OPT_2, 1), 1020: (PlayerAttributeOption.OPT_3, 2), } shape_base_offset = get_base_byte_value(value, shape_val_count) hair_shape, shape_base_multiplier = shape_base_offset_by_value[ shape_base_offset ] shape_base = shape_1_base + (shape_val_count * shape_base_multiplier) front_by_value = { 0: PlayerAttributeOption.OPT_1, 1: PlayerAttributeOption.OPT_2, 2: PlayerAttributeOption.OPT_3, 3: PlayerAttributeOption.OPT_4, 4: PlayerAttributeOption.OPT_5, 5: PlayerAttributeOption.OPT_6, } front_value = get_base_byte_value(value - (shape_base), 1) hair_front = front_by_value[front_value] return ( hair_type, hair_shape, hair_front, hair_volume, hair_darkness, bandana_type, )
def get_bandana_color_label(self, value): value = get_base_byte_value(value, 16) # Bandana colors are repeated byte_split = 127 if value > byte_split: value = value - byte_split return self.array_opts[value]
def get_value(self): """ Get byte value via `get_raw_value`. Get base byte value (to be used to identify label) """ value = self.get_raw_value() byte_factor = 16 value = get_base_byte_value(value, byte_factor) return value
def get_wristband_color_label(self): label = PlayerAttributeOption.OPT_NONE wristband_type = self.get_wristband_type_label() value = self.get_value() value = get_base_byte_value(value, 32) if wristband_type != PlayerAttributeOption.OPT_N: label = self.array_opts_wristband_color[value] return label
def get_hair_key_very_short_1(self, value): front_by_value = { 0: PlayerAttributeOption.OPT_1, 1: PlayerAttributeOption.OPT_2, 2: PlayerAttributeOption.OPT_3, 3: PlayerAttributeOption.OPT_4, 4: PlayerAttributeOption.OPT_5, 5: PlayerAttributeOption.OPT_6, } front_value = get_lowest_byte_value(value, 6) front_value = front_by_value[front_value] shape_by_value = { 84: PlayerAttributeOption.OPT_1, 90: PlayerAttributeOption.OPT_2, 96: PlayerAttributeOption.OPT_3, 102: PlayerAttributeOption.OPT_4, } shape_value = get_base_byte_value(value, 6) shape_value = shape_by_value[shape_value] hair_type = PlayerAttributeOption.OPT_VERY_SHORT_1 hair_shape = str(shape_value) hair_front = str(front_value) hair_volume = PlayerAttributeOption.OPT_NA hair_darkness = PlayerAttributeOption.OPT_NA bandana_type = PlayerAttributeOption.OPT_NA return ( hair_type, hair_shape, hair_front, hair_volume, hair_darkness, bandana_type, )
def get_one_on_one_stopper_label(self): value = self.get_value() value = get_base_byte_value(value, 128) return self.array_opts_one_on_one_stopper[value]
def get_dk_style_label(self): value = self.get_value() value = get_lowest_byte_value(value, 16) value = get_base_byte_value(value, 4) return self.array_opts_dk_style[value]
def get_registered_position_label(self): value = self.get_value() value = get_base_byte_value(value, 16) return self.array_opts_registered_position[value]
def get_cap_label(self): value = self.get_value() value = get_base_byte_value(value, 128) return self.array_opts_cap[value]
def get_long_throw_label(self): value = self.get_value() value = get_base_byte_value(value, 128) return self.array_opts_long_throw[value]
def get_value(self): value = self.get_raw_value() value = get_base_byte_value(value, 8) return value
def get_marking_label(self): value = self.get_value() value = get_base_byte_value(value, 4) value = get_lowest_byte_value(value, 8) return self.array_opts_marking[value]
def get_covering_label(self): value = self.get_value() value = get_base_byte_value(value, 16) value = get_lowest_byte_value(value, 32) return self.array_opts_covering[value]
def get_penalty_stopper_label(self): value = self.get_value() value = get_base_byte_value(value, 64) value = get_lowest_byte_value(value, 128) return self.array_opts_penalty_stopper[value]
def get_d_line_control_label(self): value = self.get_value() value = get_base_byte_value(value, 32) value = get_lowest_byte_value(value, 64) return self.array_opts_d_line_control[value]
def get_eye_color_two_label(self): value = self.get_value()[1] value = get_lowest_byte_value(value, 128) value = get_base_byte_value(value, 8) return self.array_opts_eye_color_two[value]
def get_sliding_label(self): value = self.get_value() value = get_base_byte_value(value, 8) value = get_lowest_byte_value(value, 16) return self.array_opts_sliding[value]
def get_neck_warmer_label(self): value = self.get_value()[1] value = get_base_byte_value(value, 128) return self.array_opts_neck_warmer[value]
def get_outside_label(self): value = self.get_value() value = get_base_byte_value(value, 2) value = get_lowest_byte_value(value, 4) return self.array_opts_outside[value]
def get_eyes_position_label(self): value = self.get_value() value = get_base_byte_value(value, 32) return self.array_opts_eyes_position[value]
def get_rgb_r_label(self): value = self.get_value() byte_factor = 4 rgb_r_offset = get_base_byte_value(value, byte_factor) // byte_factor rgb_r = self.MAX_RGB_R_VALUE - rgb_r_offset return str(rgb_r)
def get_second_opt_label(cls, value): value = get_base_byte_value(value, 16) return PlayerAttributePhysicalLinkedOpts.SECOND_OPT_BY_VALUE[value]
def get_first_opt_label(cls, value): value = get_base_byte_value(value, 128) return PlayerAttributeAbilitySpcAbilityOpts.FIRST_OPT_BY_VALUE[value]
def get_shirt_type(self): value = self.get_value() value = get_base_byte_value(value, 128) return self.array_opts_shirt_type[value]