P5 the Old Stag: standing stones and altar, three-phase boss with charges, stun window, spirit wolves and stomps; antler pickaxe and trophy; group scaling and credit for every fighter; online 3-player test (protocol 12)

This commit is contained in:
Paul Bailey
2026-11-05 13:39:06 +00:00
parent 3389ec9a21
commit e03411ffdb
24 changed files with 1587 additions and 17 deletions

View File

@@ -324,6 +324,9 @@ func _run(p: Node3D, what: String, a: Array) -> void:
if d != null and d.get("open") != null and _allowed(Rules.use_problem(p.player_id, d)) \
and Actions.toggle_door(p, d):
WorldNet.piece_state(d)
"stones":
if w.stones != null:
Actions.use_stones(p, w.stones)
"barrow_loot":
if w.barrow != null:
Actions.loot_barrow(p, w.barrow)
@@ -429,8 +432,19 @@ func _run(p: Node3D, what: String, a: Array) -> void:
for m in w.get_tree().get_nodes_in_group("processor"):
m.step(float(a[0]) if a.size() > 0 and (a[0] is float or a[0] is int) else 60.0)
"debug_spawn":
if cheats and Creature.KINDS.has(_s(a, 0)) and not (_s(a, 0) in ["wolf", "alpha", "bear", "crow", "fox", "guard"]) and _v(a, 1).is_finite():
if cheats and Creature.KINDS.has(_s(a, 0)) and not (_s(a, 0) in ["wolf", "alpha", "bear", "crow", "fox", "guard", "old_stag", "spirit_wolf"]) and _v(a, 1).is_finite():
w.creatures.spawn(_s(a, 0), _v(a, 1))
"debug_boss":
# Tests: ["hold", secs] stands the Old Stag still (stunned);
# ["hp", n] sets its health.
var s: Node3D = w.stones.stag if w.stones != null and w.stones.fighting() else null
if cheats and s != null:
match _s(a, 0):
"hold":
s.state = "stunned"
s._state_t = float(a[1]) if a.size() > 1 else 30.0
"hp":
s.hp = clampf(float(a[1]) if a.size() > 1 else 1.0, 1.0, s.max_hp)
"debug_time":
if cheats:
w.day_night.day = maxi(_i(a, 0), 1)