From bb1660512915edb27873968db4cd452ac0d4a77b Mon Sep 17 00:00:00 2001 From: Leonid Pershin Date: Tue, 4 Aug 2026 05:23:00 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BF=D0=B0=D0=B2=D0=BD=D0=B5=D1=80:=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B1=D0=B8=D1=80=D0=B0=D1=82=D1=8C=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BB=D0=BD=D0=BE=D1=80=D0=BE=D1=81=D1=82=D0=BE=D0=B2=D1=83?= =?UTF-8?q?=D1=8E=20=D1=81=D1=86=D0=B5=D0=BD=D1=83,=20=D0=B0=20=D0=BD?= =?UTF-8?q?=D0=B5=20=D0=BF=D0=BE=D1=80=D1=82=D1=80=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit У player скелеты названы player1_*, поэтому фолбэк брал первую по алфавиту (портрет). ResolveScene теперь исключает portrait/fetus/suckle/_body/_head/... и приоритетит combat -> stand -> любую полноростовую. Co-Authored-By: Claude Opus 4.8 --- src/RoomMap.cs | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/RoomMap.cs b/src/RoomMap.cs index a1da0f0..7d6bfed 100644 --- a/src/RoomMap.cs +++ b/src/RoomMap.cs @@ -148,19 +148,27 @@ public partial class RoomMap : Node2D if (p != null) ShowInfo(p); } + private static readonly string[] BadStems = + { "portrait", "fetus", "suckle", "_body", "_head", "dead", "birth", "milk", "down", "baby" }; + private static string ResolveScene(string name) { if (name == "baby") return "res://characters/baby/human_baby_native.tscn"; - foreach (var s in new[] { "combat", "stand" }) - { - string path = $"res://characters/{name}/{name}_{s}_native.tscn"; - if (ResourceLoader.Exists(path)) return path; - } var dir = DirAccess.Open($"res://characters/{name}"); - if (dir != null) - foreach (var f in dir.GetFiles()) - if (f.EndsWith("_native.tscn")) return $"res://characters/{name}/{f}"; - return null; + if (dir == null) return null; + var files = new List(); + foreach (var f in dir.GetFiles()) + if (f.EndsWith("_native.tscn")) files.Add(f); + if (files.Count == 0) return null; + + bool Good(string f) { var l = f.ToLower(); foreach (var b in BadStems) if (l.Contains(b)) return false; return true; } + // приоритет: combat -> stand -> любая полноростовая (не портрет/не частичная) + foreach (var key in new[] { "combat", "stand" }) + foreach (var f in files) + if (Good(f) && f.ToLower().Contains(key)) return $"res://characters/{name}/{f}"; + foreach (var f in files) + if (Good(f)) return $"res://characters/{name}/{f}"; + return $"res://characters/{name}/{files[0]}"; } private void BuildRoomHeaders()