-
-
Save xSke/979dabd395c39eff36bcaccf87d66a3e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| from amiibo import AmiiboDump, AmiiboMasterKey | |
| from bitstring import BitString | |
| import sys | |
| import json | |
| with open("unfixed-info.bin", "rb") as fp_d, open("locked-secret.bin", "rb") as fp_t: | |
| master_keys = AmiiboMasterKey.from_separate_bin(fp_d.read(), fp_t.read()) | |
| with open("personality_data.json", "r") as fp: | |
| groups_data = json.load(fp) | |
| param_defs = [ | |
| ("near", 7), | |
| ("offensive", 7), | |
| ("grounded", 7), | |
| ("attack_out_cliff", 6), | |
| ("dash", 7), | |
| ("return_to_cliff", 6), | |
| ("air_offensive", 6), | |
| ("cliffer", 6), | |
| ("feint_master", 7), | |
| ("feint_counter", 7), | |
| ("feint_shooter", 7), | |
| ("catcher", 7), | |
| ("_100_attacker", 6), | |
| ("_100_keeper", 6), | |
| ("attack_cancel", 6), | |
| ("smash_holder", 7), | |
| ("dash_attacker", 7), | |
| ("critical_hitter", 6), | |
| ("meteor_master", 6), | |
| ("shield_master", 7), | |
| ("just_shield_master", 6), | |
| ("shield_catch_master", 6), | |
| ("item_collector", 5), | |
| ("item_throw_to_target", 5), | |
| ("dragoon_collector", 4), | |
| ("smashball_collector", 4), | |
| ("hammer_collector", 4), | |
| ("special_flagger", 4), | |
| ("item_swinger", 5), | |
| ("homerun_batter", 4), | |
| ("club_swinger", 4), | |
| ("death_swinger", 4), | |
| ("item_shooter", 5), | |
| ("carrier_broker", 5), | |
| ("charger", 5), | |
| ("appeal", 5), | |
| # the ones below here are unused for personality calculations but still useful for the parser | |
| ("fighter_01", 7), | |
| ("fighter_02", 7), | |
| ("fighter_03", 7), | |
| ("fighter_04", 7), | |
| ("fighter_05", 7), | |
| ("advantagious_fighter", 7), | |
| ("weaken_fighter", 7), | |
| ("revenge", 7), | |
| ("attack_s", 10), | |
| ("attack_hi", 10), | |
| ("attack_lw", 10), | |
| ("smash_s", 10), | |
| ("smash_hi", 10), | |
| ("smash_lw", 10), | |
| ("special_n", 10), | |
| ("special_s", 10), | |
| ("special_hi", 10), | |
| ("special_lw", 10), | |
| ("attack_air_f", 9), | |
| ("attack_air_b", 9), | |
| ("attack_air_hi", 9), | |
| ("attack_air_lw", 9), | |
| ("special_air_n", 9), | |
| ("special_air_s", 9), | |
| ("special_air_hi", 9), | |
| ("special_air_lw", 9), | |
| ("escape_air_forward", 8), | |
| ("escape_air_backward", 8), | |
| ("appeal_hi", 7), | |
| ("appeal_lw", 7), | |
| ] | |
| personality_names = [ | |
| "Normal", | |
| # def | |
| "Cautious", | |
| "Realistic", | |
| "Unflappable", | |
| # agl | |
| "Light", | |
| "Quick", | |
| "Lightning Fast", | |
| # ofn | |
| "Enthusiastic", | |
| "Aggressive", | |
| "Offensive", | |
| # rsk | |
| "Reckless", | |
| "Thrill Seeker", | |
| "Daredevil", | |
| # gen | |
| "Versatile", | |
| "Tricky", | |
| "Technician", | |
| # ent | |
| "Show-Off", | |
| "Flashy", | |
| "Entertainer", | |
| # cau | |
| "Cool", | |
| "Logical", | |
| "Sly", | |
| # dyn | |
| "Laid Back", | |
| "Wild", | |
| "Lively", | |
| ] | |
| def decode_behavior_params(dump: AmiiboDump): | |
| params = {} | |
| # This data gets a lot simpler to read if you treat it as a bitstream | |
| # and then read it "in reverse" (flip the bytes, then read bits back to front = no byte swap issues) | |
| behavior_data = dump.data[0x1BC:0x1F6] | |
| bits = BitString(behavior_data[::-1]) | |
| for name, size in param_defs[::-1]: | |
| val = bits.read("uint:{}".format(size)) | |
| # even the game internals work with "out of 100" values so we'll keep doing that here | |
| val_max = (1 << size) - 1 | |
| params[name] = val / val_max * 100 | |
| return params | |
| def scale_value(param, value, flip): | |
| # the original code actually defines a default of 0 for "appeal", and then divides by it | |
| # on ARM this just results in 0, anywhere else it'll blow up ;) | |
| if param == "appeal": | |
| return 0 | |
| # some of the "directional weight" parameters have different defaults defined in the code but none of them are ever used here so lol | |
| default = 50 | |
| if flip: | |
| scaled = (default - value) / default | |
| else: | |
| scaled = (value - default) / default | |
| # since we rescale to range from -1.0 to 1.0, this means values below halfway are meaningless lol | |
| return max(0, min(1, scaled)) | |
| def calculate_group_score(params, group): | |
| score = 0 | |
| for param_data in group["scores"]: | |
| name = param_data["param"] | |
| value = scale_value(name, params[name], param_data["flip"]) | |
| if value >= param_data["min_1"]: | |
| score += param_data["point_1"] | |
| if value >= param_data["min_2"]: | |
| score += param_data["point_2"] | |
| return score | |
| def meets_group_necessary_requirements(params, group): | |
| name = group["necessary_param"] | |
| if not name: | |
| return True | |
| value = scale_value(name, params[name], group["necessary_flip"]) | |
| return value >= group["necessary_min"] | |
| def get_personality_tier(group, score): | |
| winner = 0 # default is Normal | |
| for tier in group["tiers"]: | |
| if score >= tier["points"]: | |
| winner = tier["personality"] | |
| return winner | |
| def calculate_personality(params): | |
| group_scores = [] | |
| for group_id, group_data in groups_data.items(): | |
| if not meets_group_necessary_requirements(params, group_data): | |
| continue | |
| score = calculate_group_score(params, group_data) | |
| # using numeric index as a tiebreaker here | |
| key = (score, group_data["index"]) | |
| group_scores.append((key, group_data)) | |
| print("{}: {} pts".format(group_id, score)) | |
| if not group_scores: | |
| # if no groups are eligible, we're Normal | |
| return 0 | |
| # find the best group! | |
| (winner_score, _), winner_group = max(group_scores) | |
| return get_personality_tier(winner_group, winner_score) | |
| if __name__ == "__main__": | |
| with open(sys.argv[1], "rb") as fp: | |
| dump = AmiiboDump(master_keys, fp.read()) | |
| dump.unlock() | |
| params = decode_behavior_params(dump) | |
| personality = calculate_personality(params) | |
| print("final personality: {}".format(personality_names[personality])) |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "def": { | |
| "index": 1, | |
| "scores": [ | |
| { | |
| "param": "offensive", | |
| "min_1": 0.26, | |
| "point_1": 18, | |
| "min_2": 0.76, | |
| "point_2": 20, | |
| "flip": true | |
| }, | |
| { | |
| "param": "grounded", | |
| "min_1": 0.25, | |
| "point_1": 18, | |
| "min_2": 0.76, | |
| "point_2": 18, | |
| "flip": false | |
| }, | |
| { | |
| "param": "attack_out_cliff", | |
| "min_1": 0.26, | |
| "point_1": 10, | |
| "min_2": 0.51, | |
| "point_2": 15, | |
| "flip": true | |
| }, | |
| { | |
| "param": "dash", | |
| "min_1": 0.51, | |
| "point_1": 18, | |
| "min_2": 0.76, | |
| "point_2": 25, | |
| "flip": true | |
| }, | |
| { | |
| "param": "cliffer", | |
| "min_1": 0.26, | |
| "point_1": 15, | |
| "min_2": 0.51, | |
| "point_2": 20, | |
| "flip": true | |
| }, | |
| { | |
| "param": "shield_master", | |
| "min_1": 0.25, | |
| "point_1": 38, | |
| "min_2": 0.76, | |
| "point_2": 42, | |
| "flip": false | |
| }, | |
| { | |
| "param": "shield_catch_master", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 5, | |
| "flip": false | |
| }, | |
| { | |
| "param": "item_throw_to_target", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 4, | |
| "flip": true | |
| }, | |
| { | |
| "param": "dragoon_collector", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 4, | |
| "flip": true | |
| }, | |
| { | |
| "param": "smashball_collector", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 4, | |
| "flip": true | |
| }, | |
| { | |
| "param": "hammer_collector", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 4, | |
| "flip": true | |
| }, | |
| { | |
| "param": "special_flagger", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 4, | |
| "flip": true | |
| } | |
| ], | |
| "tiers": [ | |
| { | |
| "points": 100, | |
| "personality": 1 | |
| }, | |
| { | |
| "points": 180, | |
| "personality": 2 | |
| }, | |
| { | |
| "points": 240, | |
| "personality": 3 | |
| } | |
| ], | |
| "necessary_param": "offensive", | |
| "necessary_min": 0.26, | |
| "necessary_flip": true | |
| }, | |
| "agl": { | |
| "index": 2, | |
| "scores": [ | |
| { | |
| "param": "offensive", | |
| "min_1": 0.25, | |
| "point_1": 11, | |
| "min_2": 0.51, | |
| "point_2": 24, | |
| "flip": false | |
| }, | |
| { | |
| "param": "dash", | |
| "min_1": 0.25, | |
| "point_1": 16, | |
| "min_2": 0.76, | |
| "point_2": 40, | |
| "flip": false | |
| }, | |
| { | |
| "param": "air_offensive", | |
| "min_1": 0.26, | |
| "point_1": 5, | |
| "min_2": 0.76, | |
| "point_2": 15, | |
| "flip": true | |
| }, | |
| { | |
| "param": "smash_holder", | |
| "min_1": 0.26, | |
| "point_1": 11, | |
| "min_2": 0.51, | |
| "point_2": 22, | |
| "flip": true | |
| }, | |
| { | |
| "param": "dash_attacker", | |
| "min_1": 0.25, | |
| "point_1": 13, | |
| "min_2": 0.51, | |
| "point_2": 22, | |
| "flip": false | |
| }, | |
| { | |
| "param": "critical_hitter", | |
| "min_1": 0.26, | |
| "point_1": 8, | |
| "min_2": 0.76, | |
| "point_2": 15, | |
| "flip": true | |
| }, | |
| { | |
| "param": "shield_master", | |
| "min_1": 0.26, | |
| "point_1": 13, | |
| "min_2": 0.76, | |
| "point_2": 30, | |
| "flip": true | |
| }, | |
| { | |
| "param": "item_collector", | |
| "min_1": 0.22, | |
| "point_1": 11, | |
| "min_2": 0.48, | |
| "point_2": 15, | |
| "flip": false | |
| }, | |
| { | |
| "param": "hammer_collector", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.51, | |
| "point_2": 3, | |
| "flip": true | |
| }, | |
| { | |
| "param": "special_flagger", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.51, | |
| "point_2": 3, | |
| "flip": true | |
| }, | |
| { | |
| "param": "homerun_batter", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.51, | |
| "point_2": 3, | |
| "flip": true | |
| }, | |
| { | |
| "param": "club_swinger", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.51, | |
| "point_2": 3, | |
| "flip": true | |
| }, | |
| { | |
| "param": "carrier_broker", | |
| "min_1": 0.22, | |
| "point_1": 2, | |
| "min_2": 0.48, | |
| "point_2": 3, | |
| "flip": false | |
| }, | |
| { | |
| "param": "charger", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.51, | |
| "point_2": 2, | |
| "flip": true | |
| } | |
| ], | |
| "tiers": [ | |
| { | |
| "points": 100, | |
| "personality": 4 | |
| }, | |
| { | |
| "points": 170, | |
| "personality": 5 | |
| }, | |
| { | |
| "points": 225, | |
| "personality": 6 | |
| } | |
| ], | |
| "necessary_param": "dash", | |
| "necessary_min": 0.25, | |
| "necessary_flip": false | |
| }, | |
| "ofn": { | |
| "index": 3, | |
| "scores": [ | |
| { | |
| "param": "near", | |
| "min_1": 0.25, | |
| "point_1": 15, | |
| "min_2": 0.76, | |
| "point_2": 22, | |
| "flip": false | |
| }, | |
| { | |
| "param": "offensive", | |
| "min_1": 0.25, | |
| "point_1": 21, | |
| "min_2": 0.76, | |
| "point_2": 30, | |
| "flip": false | |
| }, | |
| { | |
| "param": "attack_out_cliff", | |
| "min_1": 0.26, | |
| "point_1": 13, | |
| "min_2": 0.51, | |
| "point_2": 20, | |
| "flip": false | |
| }, | |
| { | |
| "param": "dash", | |
| "min_1": 0.25, | |
| "point_1": 11, | |
| "min_2": 0.51, | |
| "point_2": 13, | |
| "flip": false | |
| }, | |
| { | |
| "param": "air_offensive", | |
| "min_1": 0.26, | |
| "point_1": 10, | |
| "min_2": 0.76, | |
| "point_2": 18, | |
| "flip": false | |
| }, | |
| { | |
| "param": "feint_shooter", | |
| "min_1": 0.26, | |
| "point_1": 7, | |
| "min_2": 0.76, | |
| "point_2": 8, | |
| "flip": true | |
| }, | |
| { | |
| "param": "dash_attacker", | |
| "min_1": 0.25, | |
| "point_1": 10, | |
| "min_2": 0.51, | |
| "point_2": 18, | |
| "flip": false | |
| }, | |
| { | |
| "param": "meteor_master", | |
| "min_1": 0.26, | |
| "point_1": 10, | |
| "min_2": 0.51, | |
| "point_2": 28, | |
| "flip": false | |
| }, | |
| { | |
| "param": "item_collector", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.51, | |
| "point_2": 4, | |
| "flip": true | |
| }, | |
| { | |
| "param": "item_throw_to_target", | |
| "min_1": 0.48, | |
| "point_1": 4, | |
| "min_2": 0.74, | |
| "point_2": 8, | |
| "flip": false | |
| }, | |
| { | |
| "param": "dragoon_collector", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 4, | |
| "flip": true | |
| }, | |
| { | |
| "param": "smashball_collector", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 4, | |
| "flip": true | |
| }, | |
| { | |
| "param": "hammer_collector", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 4, | |
| "flip": true | |
| }, | |
| { | |
| "param": "special_flagger", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.76, | |
| "point_2": 4, | |
| "flip": true | |
| } | |
| ], | |
| "tiers": [ | |
| { | |
| "points": 100, | |
| "personality": 7 | |
| }, | |
| { | |
| "points": 180, | |
| "personality": 8 | |
| }, | |
| { | |
| "points": 235, | |
| "personality": 9 | |
| } | |
| ], | |
| "necessary_param": "near", | |
| "necessary_min": 0.25, | |
| "necessary_flip": false | |
| }, | |
| "rsk": { | |
| "index": 4, | |
| "scores": [ | |
| { | |
| "param": "near", | |
| "min_1": 0.25, | |
| "point_1": 15, | |
| "min_2": 0.51, | |
| "point_2": 22, | |
| "flip": false | |
| }, | |
| { | |
| "param": "offensive", | |
| "min_1": 0.25, | |
| "point_1": 11, | |
| "min_2": 0.76, | |
| "point_2": 16, | |
| "flip": false | |
| }, | |
| { | |
| "param": "grounded", | |
| "min_1": 0.26, | |
| "point_1": 5, | |
| "min_2": 0.51, | |
| "point_2": 10, | |
| "flip": true | |
| }, | |
| { | |
| "param": "attack_out_cliff", | |
| "min_1": 0.26, | |
| "point_1": 24, | |
| "min_2": 0.76, | |
| "point_2": 28, | |
| "flip": false | |
| }, | |
| { | |
| "param": "air_offensive", | |
| "min_1": 0.26, | |
| "point_1": 8, | |
| "min_2": 0.76, | |
| "point_2": 13, | |
| "flip": false | |
| }, | |
| { | |
| "param": "cliffer", | |
| "min_1": 0.51, | |
| "point_1": 5, | |
| "min_2": 0.76, | |
| "point_2": 8, | |
| "flip": false | |
| }, | |
| { | |
| "param": "feint_master", | |
| "min_1": 0.25, | |
| "point_1": 3, | |
| "min_2": 0.76, | |
| "point_2": 5, | |
| "flip": false | |
| }, | |
| { | |
| "param": "feint_counter", | |
| "min_1": 0.25, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 5, | |
| "flip": false | |
| }, | |
| { | |
| "param": "feint_shooter", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.51, | |
| "point_2": 3, | |
| "flip": true | |
| }, | |
| { | |
| "param": "dash_attacker", | |
| "min_1": 0.25, | |
| "point_1": 10, | |
| "min_2": 0.51, | |
| "point_2": 16, | |
| "flip": false | |
| }, | |
| { | |
| "param": "critical_hitter", | |
| "min_1": 0.26, | |
| "point_1": 4, | |
| "min_2": 0.51, | |
| "point_2": 8, | |
| "flip": false | |
| }, | |
| { | |
| "param": "meteor_master", | |
| "min_1": 0.26, | |
| "point_1": 12, | |
| "min_2": 0.51, | |
| "point_2": 30, | |
| "flip": false | |
| }, | |
| { | |
| "param": "just_shield_master", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 6, | |
| "flip": false | |
| }, | |
| { | |
| "param": "hammer_collector", | |
| "min_1": 0.2, | |
| "point_1": 5, | |
| "min_2": 0.73, | |
| "point_2": 8, | |
| "flip": false | |
| }, | |
| { | |
| "param": "special_flagger", | |
| "min_1": 0.2, | |
| "point_1": 2, | |
| "min_2": 0.46, | |
| "point_2": 5, | |
| "flip": false | |
| }, | |
| { | |
| "param": "carrier_broker", | |
| "min_1": 0.22, | |
| "point_1": 2, | |
| "min_2": 0.74, | |
| "point_2": 3, | |
| "flip": false | |
| } | |
| ], | |
| "tiers": [ | |
| { | |
| "points": 80, | |
| "personality": 10 | |
| }, | |
| { | |
| "points": 160, | |
| "personality": 11 | |
| }, | |
| { | |
| "points": 220, | |
| "personality": 12 | |
| } | |
| ], | |
| "necessary_param": "attack_out_cliff", | |
| "necessary_min": 0.26, | |
| "necessary_flip": false | |
| }, | |
| "gen": { | |
| "index": 5, | |
| "scores": [ | |
| { | |
| "param": "attack_out_cliff", | |
| "min_1": 0.26, | |
| "point_1": 7, | |
| "min_2": 0.76, | |
| "point_2": 7, | |
| "flip": false | |
| }, | |
| { | |
| "param": "air_offensive", | |
| "min_1": 0.26, | |
| "point_1": 5, | |
| "min_2": 0.76, | |
| "point_2": 7, | |
| "flip": true | |
| }, | |
| { | |
| "param": "feint_master", | |
| "min_1": 0.25, | |
| "point_1": 8, | |
| "min_2": 0.76, | |
| "point_2": 13, | |
| "flip": false | |
| }, | |
| { | |
| "param": "feint_counter", | |
| "min_1": 0.25, | |
| "point_1": 8, | |
| "min_2": 0.76, | |
| "point_2": 13, | |
| "flip": false | |
| }, | |
| { | |
| "param": "feint_shooter", | |
| "min_1": 0.25, | |
| "point_1": 8, | |
| "min_2": 0.76, | |
| "point_2": 13, | |
| "flip": false | |
| }, | |
| { | |
| "param": "catcher", | |
| "min_1": 0.25, | |
| "point_1": 7, | |
| "min_2": 0.76, | |
| "point_2": 9, | |
| "flip": false | |
| }, | |
| { | |
| "param": "attack_cancel", | |
| "min_1": 0.26, | |
| "point_1": 5, | |
| "min_2": 0.76, | |
| "point_2": 5, | |
| "flip": false | |
| }, | |
| { | |
| "param": "meteor_master", | |
| "min_1": 0.26, | |
| "point_1": 4, | |
| "min_2": 0.76, | |
| "point_2": 15, | |
| "flip": false | |
| }, | |
| { | |
| "param": "shield_master", | |
| "min_1": 0.25, | |
| "point_1": 4, | |
| "min_2": 0.76, | |
| "point_2": 10, | |
| "flip": false | |
| }, | |
| { | |
| "param": "just_shield_master", | |
| "min_1": 0.26, | |
| "point_1": 23, | |
| "min_2": 0.76, | |
| "point_2": 35, | |
| "flip": false | |
| }, | |
| { | |
| "param": "shield_catch_master", | |
| "min_1": 0.26, | |
| "point_1": 5, | |
| "min_2": 0.46, | |
| "point_2": 9, | |
| "flip": false | |
| }, | |
| { | |
| "param": "item_collector", | |
| "min_1": 0.22, | |
| "point_1": 3, | |
| "min_2": 0.76, | |
| "point_2": 8, | |
| "flip": false | |
| }, | |
| { | |
| "param": "item_throw_to_target", | |
| "min_1": 0.22, | |
| "point_1": 3, | |
| "min_2": 0.48, | |
| "point_2": 4, | |
| "flip": false | |
| }, | |
| { | |
| "param": "dragoon_collector", | |
| "min_1": 0.2, | |
| "point_1": 3, | |
| "min_2": 0.46, | |
| "point_2": 7, | |
| "flip": false | |
| }, | |
| { | |
| "param": "smashball_collector", | |
| "min_1": 0.2, | |
| "point_1": 3, | |
| "min_2": 0.76, | |
| "point_2": 5, | |
| "flip": false | |
| }, | |
| { | |
| "param": "item_swinger", | |
| "min_1": 0.22, | |
| "point_1": 2, | |
| "min_2": 0.46, | |
| "point_2": 3, | |
| "flip": false | |
| }, | |
| { | |
| "param": "homerun_batter", | |
| "min_1": 0.2, | |
| "point_1": 4, | |
| "min_2": 0.76, | |
| "point_2": 4, | |
| "flip": false | |
| }, | |
| { | |
| "param": "club_swinger", | |
| "min_1": 0.2, | |
| "point_1": 4, | |
| "min_2": 0.76, | |
| "point_2": 4, | |
| "flip": false | |
| }, | |
| { | |
| "param": "death_swinger", | |
| "min_1": 0.2, | |
| "point_1": 4, | |
| "min_2": 0.46, | |
| "point_2": 4, | |
| "flip": false | |
| }, | |
| { | |
| "param": "item_shooter", | |
| "min_1": 0.22, | |
| "point_1": 3, | |
| "min_2": 0.76, | |
| "point_2": 4, | |
| "flip": false | |
| }, | |
| { | |
| "param": "carrier_broker", | |
| "min_1": 0.26, | |
| "point_1": 4, | |
| "min_2": 0.76, | |
| "point_2": 4, | |
| "flip": true | |
| } | |
| ], | |
| "tiers": [ | |
| { | |
| "points": 80, | |
| "personality": 13 | |
| }, | |
| { | |
| "points": 120, | |
| "personality": 14 | |
| }, | |
| { | |
| "points": 150, | |
| "personality": 15 | |
| } | |
| ], | |
| "necessary_param": "just_shield_master", | |
| "necessary_min": 0.26, | |
| "necessary_flip": false | |
| }, | |
| "ent": { | |
| "index": 6, | |
| "scores": [ | |
| { | |
| "param": "attack_out_cliff", | |
| "min_1": 0.26, | |
| "point_1": 8, | |
| "min_2": 0.76, | |
| "point_2": 12, | |
| "flip": false | |
| }, | |
| { | |
| "param": "_100_keeper", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.51, | |
| "point_2": 4, | |
| "flip": true | |
| }, | |
| { | |
| "param": "smash_holder", | |
| "min_1": 0.25, | |
| "point_1": 2, | |
| "min_2": 0.51, | |
| "point_2": 3, | |
| "flip": false | |
| }, | |
| { | |
| "param": "critical_hitter", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.76, | |
| "point_2": 3, | |
| "flip": false | |
| }, | |
| { | |
| "param": "meteor_master", | |
| "min_1": 0.26, | |
| "point_1": 7, | |
| "min_2": 0.76, | |
| "point_2": 11, | |
| "flip": false | |
| }, | |
| { | |
| "param": "just_shield_master", | |
| "min_1": 0.26, | |
| "point_1": 8, | |
| "min_2": 0.76, | |
| "point_2": 12, | |
| "flip": false | |
| }, | |
| { | |
| "param": "item_throw_to_target", | |
| "min_1": 0.26, | |
| "point_1": 5, | |
| "min_2": 0.51, | |
| "point_2": 13, | |
| "flip": true | |
| }, | |
| { | |
| "param": "dragoon_collector", | |
| "min_1": 0.2, | |
| "point_1": 8, | |
| "min_2": 0.46, | |
| "point_2": 13, | |
| "flip": false | |
| }, | |
| { | |
| "param": "smashball_collector", | |
| "min_1": 0.2, | |
| "point_1": 8, | |
| "min_2": 0.46, | |
| "point_2": 13, | |
| "flip": false | |
| }, | |
| { | |
| "param": "hammer_collector", | |
| "min_1": 0.2, | |
| "point_1": 8, | |
| "min_2": 0.46, | |
| "point_2": 14, | |
| "flip": false | |
| }, | |
| { | |
| "param": "special_flagger", | |
| "min_1": 0.2, | |
| "point_1": 13, | |
| "min_2": 0.73, | |
| "point_2": 17, | |
| "flip": false | |
| }, | |
| { | |
| "param": "homerun_batter", | |
| "min_1": 0.2, | |
| "point_1": 8, | |
| "min_2": 0.73, | |
| "point_2": 12, | |
| "flip": false | |
| }, | |
| { | |
| "param": "club_swinger", | |
| "min_1": 0.2, | |
| "point_1": 5, | |
| "min_2": 0.46, | |
| "point_2": 13, | |
| "flip": false | |
| }, | |
| { | |
| "param": "death_swinger", | |
| "min_1": 0.2, | |
| "point_1": 5, | |
| "min_2": 0.46, | |
| "point_2": 14, | |
| "flip": false | |
| }, | |
| { | |
| "param": "charger", | |
| "min_1": 0.22, | |
| "point_1": 2, | |
| "min_2": 0.48, | |
| "point_2": 3, | |
| "flip": false | |
| }, | |
| { | |
| "param": "appeal", | |
| "min_1": 0.25, | |
| "point_1": 18, | |
| "min_2": 0.76, | |
| "point_2": 34, | |
| "flip": false | |
| } | |
| ], | |
| "tiers": [ | |
| { | |
| "points": 90, | |
| "personality": 16 | |
| }, | |
| { | |
| "points": 170, | |
| "personality": 17 | |
| }, | |
| { | |
| "points": 230, | |
| "personality": 18 | |
| } | |
| ], | |
| "necessary_param": "appeal", | |
| "necessary_min": 0.25, | |
| "necessary_flip": false | |
| }, | |
| "cau": { | |
| "index": 7, | |
| "scores": [ | |
| { | |
| "param": "near", | |
| "min_1": 0.26, | |
| "point_1": 5, | |
| "min_2": 0.51, | |
| "point_2": 10, | |
| "flip": true | |
| }, | |
| { | |
| "param": "offensive", | |
| "min_1": 0.26, | |
| "point_1": 6, | |
| "min_2": 0.51, | |
| "point_2": 12, | |
| "flip": true | |
| }, | |
| { | |
| "param": "grounded", | |
| "min_1": 0.25, | |
| "point_1": 7, | |
| "min_2": 0.51, | |
| "point_2": 12, | |
| "flip": false | |
| }, | |
| { | |
| "param": "attack_out_cliff", | |
| "min_1": 0.26, | |
| "point_1": 7, | |
| "min_2": 0.51, | |
| "point_2": 12, | |
| "flip": true | |
| }, | |
| { | |
| "param": "dash", | |
| "min_1": 0.26, | |
| "point_1": 7, | |
| "min_2": 0.51, | |
| "point_2": 12, | |
| "flip": true | |
| }, | |
| { | |
| "param": "air_offensive", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.76, | |
| "point_2": 6, | |
| "flip": true | |
| }, | |
| { | |
| "param": "cliffer", | |
| "min_1": 0.26, | |
| "point_1": 8, | |
| "min_2": 0.76, | |
| "point_2": 10, | |
| "flip": true | |
| }, | |
| { | |
| "param": "feint_master", | |
| "min_1": 0.25, | |
| "point_1": 3, | |
| "min_2": 0.76, | |
| "point_2": 4, | |
| "flip": false | |
| }, | |
| { | |
| "param": "feint_counter", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 5, | |
| "flip": true | |
| }, | |
| { | |
| "param": "feint_shooter", | |
| "min_1": 0.25, | |
| "point_1": 3, | |
| "min_2": 0.76, | |
| "point_2": 6, | |
| "flip": false | |
| }, | |
| { | |
| "param": "smash_holder", | |
| "min_1": 0.51, | |
| "point_1": 3, | |
| "min_2": 0.76, | |
| "point_2": 6, | |
| "flip": true | |
| }, | |
| { | |
| "param": "dash_attacker", | |
| "min_1": 0.51, | |
| "point_1": 4, | |
| "min_2": 0.76, | |
| "point_2": 6, | |
| "flip": true | |
| }, | |
| { | |
| "param": "critical_hitter", | |
| "min_1": 0.26, | |
| "point_1": 4, | |
| "min_2": 0.76, | |
| "point_2": 6, | |
| "flip": true | |
| }, | |
| { | |
| "param": "meteor_master", | |
| "min_1": 0.26, | |
| "point_1": 4, | |
| "min_2": 0.76, | |
| "point_2": 5, | |
| "flip": true | |
| }, | |
| { | |
| "param": "shield_master", | |
| "min_1": 0.26, | |
| "point_1": 29, | |
| "min_2": 0.76, | |
| "point_2": 42, | |
| "flip": true | |
| }, | |
| { | |
| "param": "just_shield_master", | |
| "min_1": 0.26, | |
| "point_1": 5, | |
| "min_2": 0.76, | |
| "point_2": 5, | |
| "flip": true | |
| }, | |
| { | |
| "param": "hammer_collector", | |
| "min_1": 0.26, | |
| "point_1": 4, | |
| "min_2": 0.51, | |
| "point_2": 10, | |
| "flip": true | |
| }, | |
| { | |
| "param": "special_flagger", | |
| "min_1": 0.26, | |
| "point_1": 6, | |
| "min_2": 0.51, | |
| "point_2": 12, | |
| "flip": true | |
| }, | |
| { | |
| "param": "charger", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.76, | |
| "point_2": 5, | |
| "flip": true | |
| } | |
| ], | |
| "tiers": [ | |
| { | |
| "points": 80, | |
| "personality": 19 | |
| }, | |
| { | |
| "points": 160, | |
| "personality": 20 | |
| }, | |
| { | |
| "points": 215, | |
| "personality": 21 | |
| } | |
| ], | |
| "necessary_param": "shield_master", | |
| "necessary_min": 0.26, | |
| "necessary_flip": true | |
| }, | |
| "dyn": { | |
| "index": 8, | |
| "scores": [ | |
| { | |
| "param": "offensive", | |
| "min_1": 0.25, | |
| "point_1": 5, | |
| "min_2": 0.76, | |
| "point_2": 7, | |
| "flip": false | |
| }, | |
| { | |
| "param": "attack_out_cliff", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 5, | |
| "flip": false | |
| }, | |
| { | |
| "param": "air_offensive", | |
| "min_1": 0.26, | |
| "point_1": 7, | |
| "min_2": 0.76, | |
| "point_2": 10, | |
| "flip": false | |
| }, | |
| { | |
| "param": "catcher", | |
| "min_1": 0.26, | |
| "point_1": 3, | |
| "min_2": 0.51, | |
| "point_2": 3, | |
| "flip": true | |
| }, | |
| { | |
| "param": "attack_cancel", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.51, | |
| "point_2": 2, | |
| "flip": true | |
| }, | |
| { | |
| "param": "smash_holder", | |
| "min_1": 0.25, | |
| "point_1": 7, | |
| "min_2": 0.76, | |
| "point_2": 9, | |
| "flip": false | |
| }, | |
| { | |
| "param": "dash_attacker", | |
| "min_1": 0.25, | |
| "point_1": 6, | |
| "min_2": 0.76, | |
| "point_2": 7, | |
| "flip": false | |
| }, | |
| { | |
| "param": "critical_hitter", | |
| "min_1": 0.26, | |
| "point_1": 12, | |
| "min_2": 0.76, | |
| "point_2": 15, | |
| "flip": false | |
| }, | |
| { | |
| "param": "meteor_master", | |
| "min_1": 0.26, | |
| "point_1": 11, | |
| "min_2": 0.51, | |
| "point_2": 12, | |
| "flip": false | |
| }, | |
| { | |
| "param": "shield_master", | |
| "min_1": 0.25, | |
| "point_1": 11, | |
| "min_2": 0.76, | |
| "point_2": 12, | |
| "flip": false | |
| }, | |
| { | |
| "param": "just_shield_master", | |
| "min_1": 0.26, | |
| "point_1": 7, | |
| "min_2": 0.76, | |
| "point_2": 8, | |
| "flip": true | |
| }, | |
| { | |
| "param": "item_throw_to_target", | |
| "min_1": 0.26, | |
| "point_1": 2, | |
| "min_2": 0.76, | |
| "point_2": 3, | |
| "flip": true | |
| }, | |
| { | |
| "param": "dragoon_collector", | |
| "min_1": 0.2, | |
| "point_1": 3, | |
| "min_2": 0.46, | |
| "point_2": 5, | |
| "flip": false | |
| }, | |
| { | |
| "param": "smashball_collector", | |
| "min_1": 0.2, | |
| "point_1": 3, | |
| "min_2": 0.46, | |
| "point_2": 7, | |
| "flip": false | |
| }, | |
| { | |
| "param": "hammer_collector", | |
| "min_1": 0.2, | |
| "point_1": 3, | |
| "min_2": 0.46, | |
| "point_2": 7, | |
| "flip": false | |
| }, | |
| { | |
| "param": "special_flagger", | |
| "min_1": 0.2, | |
| "point_1": 5, | |
| "min_2": 0.46, | |
| "point_2": 10, | |
| "flip": false | |
| }, | |
| { | |
| "param": "item_swinger", | |
| "min_1": 0.26, | |
| "point_1": 6, | |
| "min_2": 0.51, | |
| "point_2": 8, | |
| "flip": true | |
| }, | |
| { | |
| "param": "homerun_batter", | |
| "min_1": 0.46, | |
| "point_1": 9, | |
| "min_2": 0.71, | |
| "point_2": 10, | |
| "flip": false | |
| }, | |
| { | |
| "param": "club_swinger", | |
| "min_1": 0.46, | |
| "point_1": 9, | |
| "min_2": 0.71, | |
| "point_2": 10, | |
| "flip": false | |
| }, | |
| { | |
| "param": "death_swinger", | |
| "min_1": 0.46, | |
| "point_1": 9, | |
| "min_2": 0.71, | |
| "point_2": 10, | |
| "flip": false | |
| }, | |
| { | |
| "param": "item_shooter", | |
| "min_1": 0.51, | |
| "point_1": 2, | |
| "min_2": 0.74, | |
| "point_2": 1, | |
| "flip": true | |
| }, | |
| { | |
| "param": "carrier_broker", | |
| "min_1": 0.48, | |
| "point_1": 2, | |
| "min_2": 0.71, | |
| "point_2": 1, | |
| "flip": false | |
| }, | |
| { | |
| "param": "charger", | |
| "min_1": 0.22, | |
| "point_1": 5, | |
| "min_2": 0.74, | |
| "point_2": 6, | |
| "flip": false | |
| } | |
| ], | |
| "tiers": [ | |
| { | |
| "points": 80, | |
| "personality": 22 | |
| }, | |
| { | |
| "points": 160, | |
| "personality": 23 | |
| }, | |
| { | |
| "points": 210, | |
| "personality": 24 | |
| } | |
| ], | |
| "necessary_param": null, | |
| "necessary_min": 0, | |
| "necessary_flip": false | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment