Add weapon move-type effectiveness
This commit is contained in:
@@ -1535,19 +1535,23 @@ func _update_forecast() -> void:
|
||||
|
||||
var range_text := "ready" if preview["in_range"] else "out of range"
|
||||
var defeat_text := " Defeat" if preview["would_defeat"] else ""
|
||||
var effective_text := _format_effective_forecast_text(preview, "effective_bonus", "effective_target_type")
|
||||
var counter_text := ""
|
||||
if preview["counter_in_range"]:
|
||||
var counter_defeat := " Defeat" if preview["counter_would_defeat"] else ""
|
||||
counter_text = "\nCounter %d, Hit %d%%, your HP %d/%d.%s" % [
|
||||
var counter_effective_text := _format_effective_forecast_text(preview, "counter_effective_bonus", "counter_effective_target_type")
|
||||
counter_text = "\nCounter %d%s, Hit %d%%, your HP %d/%d.%s" % [
|
||||
preview["counter_damage"],
|
||||
counter_effective_text,
|
||||
preview.get("counter_hit_chance", 0),
|
||||
preview["attacker_hp_after"],
|
||||
selected["max_hp"],
|
||||
counter_defeat
|
||||
]
|
||||
forecast_label.text = "Forecast: %s\n%d damage, Hit %d%%, target HP %d/%d.%s%s" % [
|
||||
forecast_label.text = "Forecast: %s\n%d damage%s, Hit %d%%, target HP %d/%d.%s%s" % [
|
||||
range_text,
|
||||
preview["damage"],
|
||||
effective_text,
|
||||
preview.get("hit_chance", 100),
|
||||
preview["target_hp_after"],
|
||||
target["max_hp"],
|
||||
@@ -1556,6 +1560,16 @@ func _update_forecast() -> void:
|
||||
]
|
||||
|
||||
|
||||
func _format_effective_forecast_text(preview: Dictionary, bonus_key: String, type_key: String) -> String:
|
||||
var bonus := int(preview.get(bonus_key, 0))
|
||||
if bonus <= 0:
|
||||
return ""
|
||||
var move_type := _format_move_type(str(preview.get(type_key, "")))
|
||||
if move_type.is_empty():
|
||||
move_type = "Target"
|
||||
return " (Effective +%d vs %s)" % [bonus, move_type]
|
||||
|
||||
|
||||
func _update_skill_forecast(selected: Dictionary) -> void:
|
||||
var preview := state.get_skill_preview(selected["id"], selected_skill_id, hover_cell)
|
||||
if preview.is_empty():
|
||||
@@ -3763,11 +3777,37 @@ func _format_equipment_bonus_text(item: Dictionary) -> String:
|
||||
continue
|
||||
var sign := "+" if amount > 0 else ""
|
||||
parts.append("%s %s%d" % [stat.to_upper(), sign, amount])
|
||||
var effective_text := _format_equipment_effectiveness_text(item)
|
||||
if not effective_text.is_empty():
|
||||
parts.append(effective_text)
|
||||
if parts.is_empty():
|
||||
return str(item.get("kind", "equipment")).capitalize()
|
||||
return _join_strings(parts, ", ")
|
||||
|
||||
|
||||
func _format_equipment_effectiveness_text(item: Dictionary) -> String:
|
||||
if str(item.get("kind", "")) != "weapon":
|
||||
return ""
|
||||
var bonus := int(item.get("effective_bonus_damage", 0))
|
||||
if bonus <= 0:
|
||||
return ""
|
||||
var move_types = item.get("effective_vs_move_types", [])
|
||||
if typeof(move_types) != TYPE_ARRAY or move_types.is_empty():
|
||||
return ""
|
||||
var labels := []
|
||||
for move_type in move_types:
|
||||
var label := _format_move_type(str(move_type))
|
||||
if not label.is_empty():
|
||||
labels.append(label)
|
||||
if labels.is_empty():
|
||||
return ""
|
||||
return "Effective +%d vs %s" % [bonus, _join_strings(labels, "/")]
|
||||
|
||||
|
||||
func _format_move_type(move_type: String) -> String:
|
||||
return move_type.strip_edges().replace("_", " ").capitalize()
|
||||
|
||||
|
||||
func _on_equip_item_pressed(item_id: String) -> void:
|
||||
var selected := state.get_selected_unit()
|
||||
if selected.is_empty():
|
||||
|
||||
Reference in New Issue
Block a user