Last active
April 10, 2023 18:12
-
-
Save rob-brown/d2cfaa843c4e65cfcb85c37dd0a8bebb to your computer and use it in GitHub Desktop.
Elixir code to compute SSBU amiibo personalities. Some code omitted to focus on the core algorithm.
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
| defmodule Personality do | |
| @doc """ | |
| Parses the attributes from the amiibo and returns the | |
| personality name. | |
| """ | |
| def parse_amiibo(amiibo = %Amiibo{}) do | |
| amiibo | |
| |> Attributes.parse() | |
| |> calculate_personality() | |
| end | |
| @doc """ | |
| Returns the personality name given the set of attributes. | |
| """ | |
| def calculate_personality(attributes = %Attributes{}) do | |
| scores = branch_scores(attributes) | |
| if scores == [] do | |
| "Normal" | |
| else | |
| {score, branch} = Enum.max(scores) | |
| # Pick the highest-scored personality, or Normal if none are high enough. | |
| branch.tiers | |
| |> Enum.filter(&(score >= &1.target_score)) | |
| |> Enum.max_by(& &1.target_score, fn -> %{personality: "Normal"} end) | |
| |> then(& &1.personality) | |
| end | |
| end | |
| @doc """ | |
| Returns the raw scores for each personality branch given the | |
| set of attributes. | |
| """ | |
| def branch_scores(attributes = %Attributes{}) do | |
| for branch <- Personality.Branch.data(), has_required_param?(branch, attributes) do | |
| score = branch_score(branch, attributes) | |
| {score, branch} | |
| end | |
| end | |
| ## Helpers | |
| defp has_required_param?(branch, attributes) do | |
| # Only one parameter is required, if any. | |
| requirement = Enum.find(branch.criteria, & &1.required) | |
| if requirement do | |
| attribute = Map.get(attributes, requirement.param_name) | |
| value = scale_value(attribute, requirement) | |
| value >= requirement.rank1.threshold | |
| else | |
| true | |
| end | |
| end | |
| defp scale_value(_value, %{param_name: :appeal}) do | |
| # The original code actually defines a default of 0 for | |
| # "appeal" (taunting), and then divides it by 0. On ARM | |
| # this just results in 0, anywhere else it'll blow up. ;) | |
| # This constant just happens to be right *most* of the time. | |
| 0.25 | |
| end | |
| defp scale_value(value, criterion) when is_number(value) do | |
| default = 50 | |
| value = value * 100 | |
| scaled = | |
| if criterion.desirable do | |
| (value - default) / default | |
| else | |
| (default - value) / default | |
| end | |
| clamp(scaled, 0..1) | |
| end | |
| defp branch_score(branch, attributes) do | |
| branch.criteria | |
| |> Enum.map(&criterion_score(&1, attributes)) | |
| |> Enum.sum() | |
| end | |
| defp criterion_score(criterion, attributes) do | |
| value = | |
| attributes | |
| |> Map.get(criterion.param_name) | |
| |> scale_value(criterion) | |
| cond do | |
| value >= criterion.rank2.threshold -> | |
| criterion.rank1.points + criterion.rank2.points | |
| value >= criterion.rank1.threshold -> | |
| criterion.rank1.points | |
| true -> | |
| 0 | |
| end | |
| end | |
| defp clamp(value, lo..hi) do | |
| max(lo, min(hi, value)) | |
| end | |
| end |
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 "Defensive" # | |
| # # | |
| # This personality must use its shield a lot and walk on the ground. It must # | |
| # not do anything too aggresive like going off stage. It shouldn’t run and # | |
| # collecting items is too risky. Overall, this is a hard personality to get # | |
| # because many attributes subtract from it and not many add. # | |
| ############################################################################### | |
| [[def.tiers]] | |
| target_score = 100 | |
| personality = "Cautious" | |
| [[def.tiers]] | |
| target_score = 180 | |
| personality = "Realistic" | |
| [[def.tiers]] | |
| target_score = 240 | |
| personality = "Unflappable" | |
| [[def.criteria]] | |
| param_name = "offensive" | |
| required = true | |
| rank1 = {threshold = 0.26, points = 18} | |
| rank2 = {threshold = 0.76, points = 20} | |
| desirable = false | |
| [[def.criteria]] | |
| param_name = "grounded" | |
| rank1 = {threshold = 0.25, points = 18} | |
| rank2 = {threshold = 0.76, points = 18} | |
| desirable = true | |
| [[def.criteria]] | |
| param_name = "attack_out_cliff" | |
| rank1 = {threshold = 0.26, points = 10} | |
| rank2 = {threshold = 0.51, points = 15} | |
| desirable = false | |
| [[def.criteria]] | |
| param_name = "dash" | |
| rank1 = {threshold = 0.51, points = 18} | |
| rank2 = {threshold = 0.76, points = 25} | |
| desirable = false | |
| [[def.criteria]] | |
| param_name = "cliffer" | |
| rank1 = {threshold = 0.26, points = 15} | |
| rank2 = {threshold = 0.51, points = 20} | |
| desirable = false | |
| [[def.criteria]] | |
| param_name = "shield_master" | |
| rank1 = {threshold = 0.25, points = 38} | |
| rank2 = {threshold = 0.76, points = 42} | |
| desirable = true | |
| [[def.criteria]] | |
| param_name = "shield_catch_master" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 5} | |
| desirable = true | |
| [[def.criteria]] | |
| param_name = "item_throw_to_target" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 4} | |
| desirable = false | |
| [[def.criteria]] | |
| param_name = "dragoon_collector" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 4} | |
| desirable = false | |
| [[def.criteria]] | |
| param_name = "smash_ball_collector" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 4} | |
| desirable = false | |
| [[def.criteria]] | |
| param_name = "hammer_collector" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 4} | |
| desirable = false | |
| [[def.criteria]] | |
| param_name = "special_flagger" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 4} | |
| desirable = false | |
| ############################################################################### | |
| # AGL "Agile" # | |
| # # | |
| # This personality must move fast. It must be aggressive but not in the air. # | |
| # Collecting items is ok but anything that requires charging or would leave # | |
| # the amiibo in a vulnerable state is too risky. # | |
| ############################################################################### | |
| [[agl.tiers]] | |
| target_score = 100 | |
| personality = "Light" | |
| [[agl.tiers]] | |
| target_score = 170 | |
| personality = "Quick" | |
| [[agl.tiers]] | |
| target_score = 225 | |
| personality = "Lightning Fast" | |
| [[agl.criteria]] | |
| param_name = "offensive" | |
| rank1 = {threshold = 0.25, points = 11} | |
| rank2 = {threshold = 0.51, points = 24} | |
| desirable = true | |
| [[agl.criteria]] | |
| param_name = "dash" | |
| required = true | |
| rank1 = {threshold = 0.25, points = 16} | |
| rank2 = {threshold = 0.76, points = 40} | |
| desirable = true | |
| [[agl.criteria]] | |
| param_name = "air_offensive" | |
| rank1 = {threshold = 0.26, points = 5} | |
| rank2 = {threshold = 0.76, points = 15} | |
| desirable = false | |
| [[agl.criteria]] | |
| param_name = "smash_holder" | |
| rank1 = {threshold = 0.26, points = 11} | |
| rank2 = {threshold = 0.51, points = 22} | |
| desirable = false | |
| [[agl.criteria]] | |
| param_name = "dash_attacker" | |
| rank1 = {threshold = 0.25, points = 13} | |
| rank2 = {threshold = 0.51, points = 22} | |
| desirable = true | |
| [[agl.criteria]] | |
| param_name = "critical_hitter" | |
| rank1 = {threshold = 0.26, points = 8} | |
| rank2 = {threshold = 0.76, points = 15} | |
| desirable = false | |
| [[agl.criteria]] | |
| param_name = "shield_master" | |
| rank1 = {threshold = 0.26, points = 13} | |
| rank2 = {threshold = 0.76, points = 30} | |
| desirable = false | |
| [[agl.criteria]] | |
| param_name = "item_collector" | |
| rank1 = {threshold = 0.22, points = 11} | |
| rank2 = {threshold = 0.48, points = 15} | |
| desirable = true | |
| [[agl.criteria]] | |
| param_name = "hammer_collector" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.51, points = 3} | |
| desirable = false | |
| [[agl.criteria]] | |
| param_name = "special_flagger" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.51, points = 3} | |
| desirable = false | |
| [[agl.criteria]] | |
| param_name = "homerun_batter" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.51, points = 3} | |
| desirable = false | |
| [[agl.criteria]] | |
| param_name = "club_swinger" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.51, points = 3} | |
| desirable = false | |
| [[agl.criteria]] | |
| param_name = "carrier_breaker" | |
| rank1 = {threshold = 0.22, points = 2} | |
| rank2 = {threshold = 0.48, points = 3} | |
| desirable = true | |
| [[agl.criteria]] | |
| param_name = "charger" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.51, points = 2} | |
| desirable = false | |
| ############################################################################### | |
| # OFN "Offensive" # | |
| # # | |
| # The amiibo must be aggressive and in the face of its opponents. Attacking # | |
| # off stage is encouraged. Items should not be used. If they are picked up, # | |
| # then they should be thrown at an opponent immediately. # | |
| ############################################################################### | |
| [[ofn.tiers]] | |
| target_score = 100 | |
| personality = "Enthusiastic" | |
| [[ofn.tiers]] | |
| target_score = 180 | |
| personality = "Aggressive" | |
| [[ofn.tiers]] | |
| target_score = 235 | |
| personality = "Offensive" | |
| [[ofn.criteria]] | |
| param_name = "near" | |
| required = true | |
| rank1 = {threshold = 0.25, points = 15} | |
| rank2 = {threshold = 0.76, points = 22} | |
| desirable = true | |
| [[ofn.criteria]] | |
| param_name = "offensive" | |
| rank1 = {threshold = 0.25, points = 21} | |
| rank2 = {threshold = 0.76, points = 30} | |
| desirable = true | |
| [[ofn.criteria]] | |
| param_name = "attack_out_cliff" | |
| rank1 = {threshold = 0.26, points = 13} | |
| rank2 = {threshold = 0.51, points = 20} | |
| desirable = true | |
| [[ofn.criteria]] | |
| param_name = "dash" | |
| rank1 = {threshold = 0.25, points = 11} | |
| rank2 = {threshold = 0.51, points = 13} | |
| desirable = true | |
| [[ofn.criteria]] | |
| param_name = "air_offensive" | |
| rank1 = {threshold = 0.26, points = 10} | |
| rank2 = {threshold = 0.76, points = 18} | |
| desirable = true | |
| [[ofn.criteria]] | |
| param_name = "feint_shooter" | |
| rank1 = {threshold = 0.26, points = 7} | |
| rank2 = {threshold = 0.76, points = 8} | |
| desirable = false | |
| [[ofn.criteria]] | |
| param_name = "dash_attacker" | |
| rank1 = {threshold = 0.25, points = 10} | |
| rank2 = {threshold = 0.51, points = 18} | |
| desirable = true | |
| [[ofn.criteria]] | |
| param_name = "meteor_master" | |
| rank1 = {threshold = 0.26, points = 10} | |
| rank2 = {threshold = 0.51, points = 28} | |
| desirable = true | |
| [[ofn.criteria]] | |
| param_name = "item_collector" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.51, points = 4} | |
| desirable = false | |
| [[ofn.criteria]] | |
| param_name = "item_throw_to_target" | |
| rank1 = {threshold = 0.48, points = 4} | |
| rank2 = {threshold = 0.74, points = 8} | |
| desirable = true | |
| [[ofn.criteria]] | |
| param_name = "dragoon_collector" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 4} | |
| desirable = false | |
| [[ofn.criteria]] | |
| param_name = "smash_ball_collector" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 4} | |
| desirable = false | |
| [[ofn.criteria]] | |
| param_name = "hammer_collector" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 4} | |
| desirable = false | |
| [[ofn.criteria]] | |
| param_name = "special_flagger" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.76, points = 4} | |
| desirable = false | |
| ############################################################################### | |
| # RSK "Risky" # | |
| # # | |
| # The amiibo must play aggresively off stage, especially dunking. The amiibo # | |
| # should be in the air a lot, preferrable off stage. Melee counter attacks # | |
| # and parries are encouraged but projectile counters are not. Going for risky # | |
| # items is encouraged. # | |
| ############################################################################### | |
| [[rsk.tiers]] | |
| target_score = 80 | |
| personality = "Reckless" | |
| [[rsk.tiers]] | |
| target_score = 160 | |
| personality = "Thrill Seeker" | |
| [[rsk.tiers]] | |
| target_score = 220 | |
| personality = "Daredevil" | |
| [[rsk.criteria]] | |
| param_name = "near" | |
| rank1 = {threshold = 0.25, points = 15} | |
| rank2 = {threshold = 0.51, points = 22} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "offensive" | |
| rank1 = {threshold = 0.25, points = 11} | |
| rank2 = {threshold = 0.76, points = 16} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "grounded" | |
| rank1 = {threshold = 0.26, points = 5} | |
| rank2 = {threshold = 0.51, points = 10} | |
| desirable = false | |
| [[rsk.criteria]] | |
| param_name = "attack_out_cliff" | |
| required = true | |
| rank1 = {threshold = 0.26, points = 24} | |
| rank2 = {threshold = 0.76, points = 28} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "air_offensive" | |
| rank1 = {threshold = 0.26, points = 8} | |
| rank2 = {threshold = 0.76, points = 13} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "cliffer" | |
| rank1 = {threshold = 0.51, points = 5} | |
| rank2 = {threshold = 0.76, points = 8} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "feint_master" | |
| rank1 = {threshold = 0.25, points = 3} | |
| rank2 = {threshold = 0.76, points = 5} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "feint_counter" | |
| rank1 = {threshold = 0.25, points = 3} | |
| rank2 = {threshold = 0.51, points = 5} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "feint_shooter" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.51, points = 3} | |
| desirable = false | |
| [[rsk.criteria]] | |
| param_name = "dash_attacker" | |
| rank1 = {threshold = 0.25, points = 10} | |
| rank2 = {threshold = 0.51, points = 16} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "critical_hitter" | |
| rank1 = {threshold = 0.26, points = 4} | |
| rank2 = {threshold = 0.51, points = 8} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "meteor_master" | |
| rank1 = {threshold = 0.26, points = 12} | |
| rank2 = {threshold = 0.51, points = 30} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "just_shield_master" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 6} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "hammer_collector" | |
| rank1 = {threshold = 0.2, points = 5} | |
| rank2 = {threshold = 0.73, points = 8} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "special_flagger" | |
| rank1 = {threshold = 0.2, points = 2} | |
| rank2 = {threshold = 0.46, points = 5} | |
| desirable = true | |
| [[rsk.criteria]] | |
| param_name = "carrier_breaker" | |
| rank1 = {threshold = 0.22, points = 2} | |
| rank2 = {threshold = 0.74, points = 3} | |
| desirable = true | |
| ############################################################################### | |
| # GEN "General" # | |
| # # | |
| # This personality must parry. It will show off its skills including # | |
| # countering, parrying, dunking, and using most items. # | |
| ############################################################################### | |
| [[gen.tiers]] | |
| target_score = 80 | |
| personality = "Versatile" | |
| [[gen.tiers]] | |
| target_score = 120 | |
| personality = "Tricky" | |
| [[gen.tiers]] | |
| target_score = 150 | |
| personality = "Technician" | |
| [[gen.criteria]] | |
| param_name = "attack_out_cliff" | |
| rank1 = {threshold = 0.26, points = 7} | |
| rank2 = {threshold = 0.76, points = 7} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "air_offensive" | |
| rank1 = {threshold = 0.26, points = 5} | |
| rank2 = {threshold = 0.76, points = 7} | |
| desirable = false | |
| [[gen.criteria]] | |
| param_name = "feint_master" | |
| rank1 = {threshold = 0.25, points = 8} | |
| rank2 = {threshold = 0.76, points = 13} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "feint_counter" | |
| rank1 = {threshold = 0.25, points = 8} | |
| rank2 = {threshold = 0.76, points = 13} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "feint_shooter" | |
| rank1 = {threshold = 0.25, points = 8} | |
| rank2 = {threshold = 0.76, points = 13} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "catcher" | |
| rank1 = {threshold = 0.25, points = 7} | |
| rank2 = {threshold = 0.76, points = 9} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "attack_cancel" | |
| rank1 = {threshold = 0.26, points = 5} | |
| rank2 = {threshold = 0.76, points = 5} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "meteor_master" | |
| rank1 = {threshold = 0.26, points = 4} | |
| rank2 = {threshold = 0.76, points = 15} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "shield_master" | |
| rank1 = {threshold = 0.25, points = 4} | |
| rank2 = {threshold = 0.76, points = 10} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "just_shield_master" | |
| required = true | |
| rank1 = {threshold = 0.26, points = 23} | |
| rank2 = {threshold = 0.76, points = 35} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "shield_catch_master" | |
| rank1 = {threshold = 0.26, points = 5} | |
| rank2 = {threshold = 0.46, points = 9} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "item_collector" | |
| rank1 = {threshold = 0.22, points = 3} | |
| rank2 = {threshold = 0.76, points = 8} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "item_throw_to_target" | |
| rank1 = {threshold = 0.22, points = 3} | |
| rank2 = {threshold = 0.48, points = 4} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "dragoon_collector" | |
| rank1 = {threshold = 0.2, points = 3} | |
| rank2 = {threshold = 0.46, points = 7} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "smash_ball_collector" | |
| rank1 = {threshold = 0.2, points = 3} | |
| rank2 = {threshold = 0.76, points = 5} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "item_swinger" | |
| rank1 = {threshold = 0.22, points = 2} | |
| rank2 = {threshold = 0.46, points = 3} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "homerun_batter" | |
| rank1 = {threshold = 0.2, points = 4} | |
| rank2 = {threshold = 0.76, points = 4} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "club_swinger" | |
| rank1 = {threshold = 0.2, points = 4} | |
| rank2 = {threshold = 0.76, points = 4} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "death_swinger" | |
| rank1 = {threshold = 0.2, points = 4} | |
| rank2 = {threshold = 0.46, points = 4} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "item_shooter" | |
| rank1 = {threshold = 0.22, points = 3} | |
| rank2 = {threshold = 0.76, points = 4} | |
| desirable = true | |
| [[gen.criteria]] | |
| param_name = "carrier_breaker" | |
| rank1 = {threshold = 0.26, points = 4} | |
| rank2 = {threshold = 0.76, points = 4} | |
| desirable = false | |
| ############################################################################### | |
| # ENT "Entertainer" # | |
| # # | |
| # This personality must taunt a lot. Dunking, charging regular/smash attacks, # | |
| # and parrying are encouraged. Items should be used as intended and not just # | |
| # thrown. # | |
| ############################################################################### | |
| [[ent.tiers]] | |
| target_score = 90 | |
| personality = "Show-Off" | |
| [[ent.tiers]] | |
| target_score = 170 | |
| personality = "Flashy" | |
| [[ent.tiers]] | |
| target_score = 230 | |
| personality = "Entertainer" | |
| [[ent.criteria]] | |
| param_name = "attack_out_cliff" | |
| rank1 = {threshold = 0.26, points = 8} | |
| rank2 = {threshold = 0.76, points = 12} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "100_keeper" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.51, points = 4} | |
| desirable = false | |
| [[ent.criteria]] | |
| param_name = "smash_holder" | |
| rank1 = {threshold = 0.25, points = 2} | |
| rank2 = {threshold = 0.51, points = 3} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "critical_hitter" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.76, points = 3} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "meteor_master" | |
| rank1 = {threshold = 0.26, points = 7} | |
| rank2 = {threshold = 0.76, points = 11} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "just_shield_master" | |
| rank1 = {threshold = 0.26, points = 8} | |
| rank2 = {threshold = 0.76, points = 12} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "item_throw_to_target" | |
| rank1 = {threshold = 0.26, points = 5} | |
| rank2 = {threshold = 0.51, points = 13} | |
| desirable = false | |
| [[ent.criteria]] | |
| param_name = "dragoon_collector" | |
| rank1 = {threshold = 0.2, points = 8} | |
| rank2 = {threshold = 0.46, points = 13} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "smash_ball_collector" | |
| rank1 = {threshold = 0.2, points = 8} | |
| rank2 = {threshold = 0.46, points = 13} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "hammer_collector" | |
| rank1 = {threshold = 0.2, points = 8} | |
| rank2 = {threshold = 0.46, points = 14} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "special_flagger" | |
| rank1 = {threshold = 0.2, points = 13} | |
| rank2 = {threshold = 0.73, points = 17} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "homerun_batter" | |
| rank1 = {threshold = 0.2, points = 8} | |
| rank2 = {threshold = 0.73, points = 12} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "club_swinger" | |
| rank1 = {threshold = 0.2, points = 5} | |
| rank2 = {threshold = 0.46, points = 13} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "death_swinger" | |
| rank1 = {threshold = 0.2, points = 5} | |
| rank2 = {threshold = 0.46, points = 14} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "charger" | |
| rank1 = {threshold = 0.22, points = 2} | |
| rank2 = {threshold = 0.48, points = 3} | |
| desirable = true | |
| [[ent.criteria]] | |
| param_name = "appeal" | |
| required = true | |
| rank1 = {threshold = 0.25, points = 18} | |
| rank2 = {threshold = 0.76, points = 34} | |
| desirable = true | |
| ############################################################################### | |
| # CAU "Cautious" # | |
| # # | |
| # This personlity must not parry. The amiibo should stay on the ground and # | |
| # use its shield a lot. It should stay far away from its opponents and # | |
| # counter projectiles if necessary. This is also a hard personality to get # | |
| # since many attributes take away from it and not many add to it. # | |
| ############################################################################### | |
| [[cau.tiers]] | |
| target_score = 80 | |
| personality = "Cool" | |
| [[cau.tiers]] | |
| target_score = 160 | |
| personality = "Logical" | |
| [[cau.tiers]] | |
| target_score = 215 | |
| personality = "Sly" | |
| [[cau.criteria]] | |
| param_name = "near" | |
| rank1 = {threshold = 0.26, points = 5} | |
| rank2 = {threshold = 0.51, points = 10} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "offensive" | |
| rank1 = {threshold = 0.26, points = 6} | |
| rank2 = {threshold = 0.51, points = 12} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "grounded" | |
| rank1 = {threshold = 0.25, points = 7} | |
| rank2 = {threshold = 0.51, points = 12} | |
| desirable = true | |
| [[cau.criteria]] | |
| param_name = "attack_out_cliff" | |
| rank1 = {threshold = 0.26, points = 7} | |
| rank2 = {threshold = 0.51, points = 12} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "dash" | |
| rank1 = {threshold = 0.26, points = 7} | |
| rank2 = {threshold = 0.51, points = 12} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "air_offensive" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.76, points = 6} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "cliffer" | |
| rank1 = {threshold = 0.26, points = 8} | |
| rank2 = {threshold = 0.76, points = 10} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "feint_master" | |
| rank1 = {threshold = 0.25, points = 3} | |
| rank2 = {threshold = 0.76, points = 4} | |
| desirable = true | |
| [[cau.criteria]] | |
| param_name = "feint_counter" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 5} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "feint_shooter" | |
| rank1 = {threshold = 0.25, points = 3} | |
| rank2 = {threshold = 0.76, points = 6} | |
| desirable = true | |
| [[cau.criteria]] | |
| param_name = "smash_holder" | |
| rank1 = {threshold = 0.51, points = 3} | |
| rank2 = {threshold = 0.76, points = 6} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "dash_attacker" | |
| rank1 = {threshold = 0.51, points = 4} | |
| rank2 = {threshold = 0.76, points = 6} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "critical_hitter" | |
| rank1 = {threshold = 0.26, points = 4} | |
| rank2 = {threshold = 0.76, points = 6} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "meteor_master" | |
| rank1 = {threshold = 0.26, points = 4} | |
| rank2 = {threshold = 0.76, points = 5} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "shield_master" | |
| required = true | |
| rank1 = {threshold = 0.26, points = 29} | |
| rank2 = {threshold = 0.76, points = 42} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "just_shield_master" | |
| rank1 = {threshold = 0.26, points = 5} | |
| rank2 = {threshold = 0.76, points = 5} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "hammer_collector" | |
| rank1 = {threshold = 0.26, points = 4} | |
| rank2 = {threshold = 0.51, points = 10} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "special_flagger" | |
| rank1 = {threshold = 0.26, points = 6} | |
| rank2 = {threshold = 0.51, points = 12} | |
| desirable = false | |
| [[cau.criteria]] | |
| param_name = "charger" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.76, points = 5} | |
| desirable = false | |
| ############################################################################### | |
| # DYN "Dynamic" # | |
| # # | |
| # This personality is quite different from the others. It has no specific # | |
| # attribute requirement. It’s similar to RSK except it doesn’t counter or # | |
| # parry. It should attack a lot, especially off stage. Charging attacks is # | |
| # good. Holding items is strongly encouraged. What’s particularly unusual is # | |
| # it’s discouraged from throwing, swinging, or shooting items. This # | |
| # personality will simply hold items and never use them, except some risky # | |
| # items. # | |
| ############################################################################### | |
| [[dyn.criteria]] | |
| param_name = "offensive" | |
| rank1 = {threshold = 0.25, points = 5} | |
| rank2 = {threshold = 0.76, points = 7} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "attack_out_cliff" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 5} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "air_offensive" | |
| rank1 = {threshold = 0.26, points = 7} | |
| rank2 = {threshold = 0.76, points = 10} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "catcher" | |
| rank1 = {threshold = 0.26, points = 3} | |
| rank2 = {threshold = 0.51, points = 3} | |
| desirable = false | |
| [[dyn.criteria]] | |
| param_name = "attack_cancel" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.51, points = 2} | |
| desirable = false | |
| [[dyn.criteria]] | |
| param_name = "smash_holder" | |
| rank1 = {threshold = 0.25, points = 7} | |
| rank2 = {threshold = 0.76, points = 9} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "dash_attacker" | |
| rank1 = {threshold = 0.25, points = 6} | |
| rank2 = {threshold = 0.76, points = 7} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "critical_hitter" | |
| rank1 = {threshold = 0.26, points = 12} | |
| rank2 = {threshold = 0.76, points = 15} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "meteor_master" | |
| rank1 = {threshold = 0.26, points = 11} | |
| rank2 = {threshold = 0.51, points = 12} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "shield_master" | |
| rank1 = {threshold = 0.25, points = 11} | |
| rank2 = {threshold = 0.76, points = 12} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "just_shield_master" | |
| rank1 = {threshold = 0.26, points = 7} | |
| rank2 = {threshold = 0.76, points = 8} | |
| desirable = false | |
| [[dyn.criteria]] | |
| param_name = "item_throw_to_target" | |
| rank1 = {threshold = 0.26, points = 2} | |
| rank2 = {threshold = 0.76, points = 3} | |
| desirable = false | |
| [[dyn.criteria]] | |
| param_name = "dragoon_collector" | |
| rank1 = {threshold = 0.2, points = 3} | |
| rank2 = {threshold = 0.46, points = 5} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "smash_ball_collector" | |
| rank1 = {threshold = 0.2, points = 3} | |
| rank2 = {threshold = 0.46, points = 7} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "hammer_collector" | |
| rank1 = {threshold = 0.2, points = 3} | |
| rank2 = {threshold = 0.46, points = 7} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "special_flagger" | |
| rank1 = {threshold = 0.2, points = 5} | |
| rank2 = {threshold = 0.46, points = 10} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "item_swinger" | |
| rank1 = {threshold = 0.26, points = 6} | |
| rank2 = {threshold = 0.51, points = 8} | |
| desirable = false | |
| [[dyn.criteria]] | |
| param_name = "homerun_batter" | |
| rank1 = {threshold = 0.46, points = 9} | |
| rank2 = {threshold = 0.71, points = 10} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "club_swinger" | |
| rank1 = {threshold = 0.46, points = 9} | |
| rank2 = {threshold = 0.71, points = 10} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "death_swinger" | |
| rank1 = {threshold = 0.46, points = 9} | |
| rank2 = {threshold = 0.71, points = 10} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "item_shooter" | |
| rank1 = {threshold = 0.51, points = 2} | |
| rank2 = {threshold = 0.74, points = 1} | |
| desirable = false | |
| [[dyn.criteria]] | |
| param_name = "carrier_breaker" | |
| rank1 = {threshold = 0.48, points = 2} | |
| rank2 = {threshold = 0.71, points = 1} | |
| desirable = true | |
| [[dyn.criteria]] | |
| param_name = "charger" | |
| rank1 = {threshold = 0.22, points = 5} | |
| rank2 = {threshold = 0.74, points = 6} | |
| desirable = true | |
| [[dyn.tiers]] | |
| target_score = 80 | |
| personality = "Laid Back" | |
| [[dyn.tiers]] | |
| target_score = 160 | |
| personality = "Wild" | |
| [[dyn.tiers]] | |
| target_score = 210 | |
| personality = "Lively" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment