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 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 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