37 lines
2.2 KiB
GDScript
37 lines
2.2 KiB
GDScript
extends SceneTree
|
|
const Simulation = preload("res://domain/battle_simulation.gd")
|
|
func _initialize() -> void: call_deferred("_run")
|
|
func _ally(action: Dictionary) -> Dictionary:
|
|
return {"id": "ally-0", "position": 0, "level": 5, "profession_id": "", "trait_ids": [],
|
|
"might": 20, "finesse": 10, "insight": 8, "vigor": 14, "resolve": 9,
|
|
"profession_base_hp": 400, "profession_base_tempo": 60, "profession_base_initiative": 90,
|
|
"weapon_power": 10, "focus_power": 2, "armor_guard": 5, "armor_ward": 3, "action": action}
|
|
func _enemy(id: String, pos: int, extra := {}) -> Dictionary:
|
|
var row := {"id": id, "position": pos, "profession_id": "", "profession_table": {},
|
|
"profession_base_hp": 3000, "profession_base_tempo": 1, "profession_base_initiative": 1,
|
|
"weapon_power": 0, "focus_power": 0, "armor_guard": 0, "armor_ward": 0,
|
|
"might": 1, "finesse": 1, "insight": 1, "vigor": 1, "resolve": 1}
|
|
row.merge(extra, true)
|
|
return row
|
|
func _run() -> void:
|
|
var pull := {"id": "hook", "base": 0, "coefficient": 0.0, "power_source": "physical_power",
|
|
"kind": "damage", "reach": 1, "target": "rearmost", "pull": 1}
|
|
var mate := _ally({"id": "w", "base": 0, "coefficient": 0.0, "power_source": "physical_power",
|
|
"kind": "damage", "reach": 1, "target": "frontmost"})
|
|
mate["id"] = "ally-1"
|
|
var wearer := _ally({"id": "w", "base": 0, "coefficient": 0.0, "power_source": "physical_power",
|
|
"kind": "damage", "reach": 1, "target": "frontmost"})
|
|
wearer["profession_base_tempo"] = 1
|
|
wearer["profession_base_initiative"] = 1
|
|
wearer["equipment_hooks"] = [{"hook": "on_advance", "implemented": true,
|
|
"effect": {"kind": "status_apply", "value": 2, "scope": "t", "rule": "mark_frontmost_on_foremost"}}]
|
|
var s: ABGBattleSimulation = Simulation.new()
|
|
s.setup("foremost", [mate, wearer], [_enemy("front", 0, {"action": pull}), _enemy("rear", 1)])
|
|
s.enemies[0].action = pull
|
|
print("PRE positions ", s.allies[0].position, " ", s.allies[1].position, " enemy act ", s.enemies[0].action)
|
|
s.run()
|
|
for r in s.journal:
|
|
print("E ", r.get("kind"), " actor=", r.get("actor"), " target=", r.get("target"), " from=", r.get("from"), " to=", r.get("to"), " steps=", r.get("steps"))
|
|
print("POST positions ", s.allies[0].position, " ", s.allies[1].position, " statuses=", s.enemies[0].statuses)
|
|
quit(0)
|