From da670af6dca81a845ff68f00e2c52b39bccda980 Mon Sep 17 00:00:00 2001 From: "z.kirill" Date: Mon, 17 Aug 2026 05:27:22 +0300 Subject: [PATCH] =?UTF-8?q?=D0=AD=D0=BA=D1=80=D0=B0=D0=BD=20=D0=BE=D1=82?= =?UTF-8?q?=D1=80=D1=8F=D0=B4=D0=B0:=20=D0=BF=D0=BE=D0=B4=D1=81=D0=BA?= =?UTF-8?q?=D0=B0=D0=B7=D0=BA=D0=B0=20=D0=BD=D0=B5=20=D0=B7=D0=B0=D0=BA?= =?UTF-8?q?=D1=80=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20=D1=81=D1=82=D0=B0=D1=82?= =?UTF-8?q?=D1=8B,=20=D0=B8=D0=BC=D0=B5=D0=BD=D0=B0=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=80=D0=B5=D0=B6=D1=83=D1=82=D1=81=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Подсказка вставала НИЖЕ курсора и ложилась ровно на строки характеристик - те самые, которые объясняет: игрок наводил на броню, чтобы понять, откуда 28%, и подсказка закрывала строку ARMOR. Теперь она встаёт выше курсора, там пусто. Ячейка схрона была 52 пикселя: в неё не влезало даже слово BATTERY, и половина имён обрезалась на середине. Шесть колонок вместо восьми - читаемость важнее двух лишних ячеек, прокрутка и так есть. Сумка вне вылазки честно подписана RAID ONLY: она принадлежит забегу и очищается при сборке этажа, а молчащий отказ читается как поломка. Co-Authored-By: Claude Opus 5 --- projects/descent/rooms/arena.room | 23 ++++++++------- projects/descent/rooms/barracks.room | 12 ++++---- projects/descent/rooms/corridor_x.room | 30 +++++++++---------- projects/descent/rooms/hall_start.room | 14 ++++----- projects/descent/rooms/nest.room | 27 ++++++++--------- projects/descent/rooms/pit.room | 36 +++++++++++------------ projects/descent/rooms/storage.room | 23 +++++++-------- projects/descent/rooms/vault.room | 40 +++++++++++++------------- projects/hollow/rooms/cells.room | 13 +++++---- projects/hollow/rooms/maw.room | 35 +++++++++++----------- projects/hollow/rooms/mouth.room | 15 +++++----- projects/hollow/rooms/shaft.room | 10 +++---- src/ui/menu.cpp | 29 ++++++++++++++----- 13 files changed, 161 insertions(+), 146 deletions(-) diff --git a/projects/descent/rooms/arena.room b/projects/descent/rooms/arena.room index 755dd17..5251b8a 100644 --- a/projects/descent/rooms/arena.room +++ b/projects/descent/rooms/arena.room @@ -1,9 +1,10 @@ # Открытая арена с четырьмя опорами. Здесь работает решатель огневых позиций: # места хватает, и отряд обязан разойтись по линиям, а не сбиться в кучу. # -# Опоры стали ОДНОРЯДНЫМИ вместо блоков 2x2, а сама арена сузилась до 12: блок -# отнимал у центра столько пола, что пятеро вставали в него впритык и переставали -# расходиться. Укрытие нужно, чтобы за него зайти, а не чтобы об него спотыкаться. +# Опоры отодвинуты В УГЛЫ и стали однорядными. Причина не в красоте: строй из +# пяти занимает поперёк почти четыре тайла, и опора, стоявшая у самого прохода, +# ловила крайнего бойца намертво — упереться в неё он мог, а обойти нет. +# Полоса пола между дверями противоположных стен обязана быть шире строя. name arena size 12 12 weight 3 @@ -12,20 +13,20 @@ start 0 depth 1 0 tiles ####+++##### -#..........# -#..........# -#..##..##..# +#.#......#.# +#.#......#.# #..........# +..........+ +..........+ +..........+ #..........# -#..##..##..# #..........# +#.#......#.# +#.#......#.# ####+++##### -spawn 4 4 0.90 shambler:4 rusher:3 spitter:2 -spawn 9 4 0.85 shambler:4 rusher:3 +spawn 4 5 0.90 shambler:4 rusher:3 spitter:2 +spawn 8 5 0.85 shambler:4 rusher:3 spawn 4 7 0.85 shambler:3 rusher:2 brute:1 -spawn 9 7 0.90 shambler:4 spitter:2 +spawn 8 7 0.90 shambler:4 spitter:2 spawn 6 1 0.40 crate:2 barrel:1 -spawn 7 10 0.40 crate:1 locker:1 +spawn 6 10 0.40 crate:1 locker:1 diff --git a/projects/descent/rooms/barracks.room b/projects/descent/rooms/barracks.room index 27ad6e0..71dd82d 100644 --- a/projects/descent/rooms/barracks.room +++ b/projects/descent/rooms/barracks.room @@ -1,9 +1,9 @@ -# Казарма: ряды перегородок и сквозной проход посередине. Твари выходят +# Казарма: койки по нишам вдоль стен, середина сквозная. Твари выходят # из-за переборок сбоку, а не в лоб, — строй приходится разворачивать на ходу. # -# Перегородок стало вдвое меньше, а проход посередине — в три ряда. Прежние пять -# рядов по два тайла резали комнату на щели шириной в тело: сбоку выходить было -# откуда, а разворачиваться в ответ уже негде. +# Прежние пять рядов переборок резали казарму на щели шириной в тело: сбоку +# выходить было откуда, а разворачиваться в ответ уже негде. Ниши остались +# ровно там, где не мешают проходу от двери до двери. name barracks size 12 9 weight 2 @@ -12,13 +12,13 @@ start 0 depth 2 0 tiles ####+++##### +#.#......#.# #..........# -#..##..##..# +..........+ +..........+ +..........+ -#..##..##..# #..........# +#.#......#.# ####+++##### spawn 4 1 0.75 shambler:3 rusher:2 spawn 8 1 0.60 spitter:2 shambler:1 diff --git a/projects/descent/rooms/corridor_x.room b/projects/descent/rooms/corridor_x.room index 7e4bd1f..ab3d148 100644 --- a/projects/descent/rooms/corridor_x.room +++ b/projects/descent/rooms/corridor_x.room @@ -1,9 +1,9 @@ -# Перекрёсток. Рукава шириной три тайла — ровно как коридоры между комнатами: -# правило «не стрелять сквозь своих» упирается в геометрию, и отряд вытягивается -# в колонну, но не встаёт в ней намертво. +# Перекрёсток. Рукава шириной пять тайлов: правило «не стрелять сквозь своих» +# упирается в геометрию, и отряд вытягивается в колонну. # -# Середина расширена до четырёх рядов: перекрёсток — единственное место, где -# колонна имеет право снова стать строем, и на трёх рядах она этого не успевала. +# Пять, а не три: строй из пяти занимает поперёк почти четыре тайла, и в рукаве +# шириной три крайние бойцы упирались в его же стены на входе. Комната обязана +# СЖИМАТЬ строй, а не запирать его. name corridor_x size 12 12 weight 3 @@ -12,18 +12,18 @@ start 0 depth 1 0 tiles ####+++##### -####...##### -####...##### -####...##### +###.....#### +###.....#### +#..........# +..........+ +..........+ +..........+ #..........# -####...##### -####...##### -####...##### +#..........# +###.....#### +###.....#### ####+++##### -spawn 6 2 0.60 rusher:3 lurker:1 -spawn 6 10 0.60 rusher:3 lurker:1 -spawn 2 6 0.50 shambler:2 spitter:1 -spawn 10 6 0.50 shambler:2 spitter:1 +spawn 5 1 0.60 rusher:3 lurker:1 +spawn 5 10 0.60 rusher:3 lurker:1 +spawn 2 5 0.50 shambler:2 spitter:1 +spawn 9 5 0.50 shambler:2 spitter:1 diff --git a/projects/descent/rooms/hall_start.room b/projects/descent/rooms/hall_start.room index 03f551f..a7226d1 100644 --- a/projects/descent/rooms/hall_start.room +++ b/projects/descent/rooms/hall_start.room @@ -1,9 +1,9 @@ # Стартовая: просторно, светло по планировке и почти пусто. # Отряд обязан успеть собраться в строй до первой твари. # -# Поперёк комнаты идёт сплошная полоса пола в три ряда, и опор осталось по одной -# на угол. Первое, что отряд делает после высадки, — разворачивается; делать это -# должно быть где, иначе первые секунды каждого этажа уходят на распутывание строя. +# Пусто здесь не от лени. Отряд высаживается в центре и первым делом +# разворачивается; разворот из пяти тел не помещается между двумя тумбами, +# и первые секунды каждого этажа уходили на распутывание строя. name hall_start size 12 10 weight 2 @@ -12,14 +12,14 @@ start 1 depth 1 0 tiles ####+++##### +#.#......#.# #..........# #..........# -#..#....#..# +..........+ +..........+ +..........+ -#..#....#..# #..........# +#.#......#.# ####+++##### -spawn 2 2 0.50 crate:2 barrel:1 -spawn 9 7 0.40 barrel:1 locker:1 +spawn 4 1 0.50 crate:2 barrel:1 +spawn 7 8 0.40 barrel:1 locker:1 diff --git a/projects/descent/rooms/nest.room b/projects/descent/rooms/nest.room index 02b004a..06a9f20 100644 --- a/projects/descent/rooms/nest.room +++ b/projects/descent/rooms/nest.room @@ -1,9 +1,10 @@ -# Гнездо: глухое ядро посередине и кольцо вокруг него. Линий огня почти нет, -# зато клинку есть где работать — сектор упирается в стену, а не в союзника. +# Гнездо: выводковые камеры по углам, середина открыта. Линий огня почти нет — +# они упираются в углы, — зато клинку есть где работать. # -# Кольцо теперь в три тайла со всех сторон, а перегородок внутри него нет вовсе. -# Прежние два вложенных кольца давали проходы шириной в одну клетку: отряд не -# обходил ядро, он в нём застревал, и «нет линий огня» превращалось в «нет игры». +# Кольцевые перегородки посередине пришлось убрать: между ними оставались +# проходы в одну клетку, и отряд не обходил гнездо, а вставал в нём. Тесноту +# теперь делает не ширина прохода, а то, что тварей выпускают со всех четырёх +# сторон сразу. name nest size 12 12 weight 2 @@ -12,18 +13,18 @@ start 0 depth 4 0 tiles ####+++##### +##.......### +##.......### #..........# -#..........# -#..........# -#...####...# -+...####...+ -+...####...+ ++..........+ ++..........+ +..........+ #..........# #..........# -#..........# +###.......## +###.......## ####+++##### spawn 5 1 0.85 shambler:3 brute:1 -spawn 2 5 0.80 lurker:2 rusher:2 -spawn 9 5 0.80 lurker:2 rusher:2 +spawn 3 5 0.80 lurker:2 rusher:2 +spawn 8 5 0.80 lurker:2 rusher:2 spawn 6 10 0.85 shambler:3 spitter:2 diff --git a/projects/descent/rooms/pit.room b/projects/descent/rooms/pit.room index 4a50f9e..f4a9a81 100644 --- a/projects/descent/rooms/pit.room +++ b/projects/descent/rooms/pit.room @@ -1,9 +1,9 @@ -# Яма: колодец посередине с единственным входом снизу. Громилу в нём -# приходится разбирать вдвоём, а круг его удара достаёт обоих. +# Яма: колодец в дальнем углу, а не посередине. Громилу в нём приходится +# разбирать вдвоём, а круг его удара достаёт обоих. # -# Колодец сузился до двух тайлов, зато обход вокруг него стал трёхрядным. Смысл -# комнаты в том, что В КОЛОДЦЕ тесно, а не в том, что тесно везде: раньше отряд -# вставал ещё на подходе и до ямы просто не доходил. +# Посередине колодец стоять не может: он перегораживал бы проход от двери к +# двери, и строй упирался бы в его стенку всей шириной. В углу он делает ровно +# то же самое — заставляет лезть в тесноту, — но лезть туда решает игрок. name pit size 12 12 weight 2 @@ -12,19 +12,19 @@ start 0 depth 6 0 tiles ####+++##### +#.#......#.# +#.#......#.# +#..........# ++..........+ ++..........+ ++..........+ #..........# #..........# -#..........# -#...####...# -+...#..#...+ -+...#..#...+ -+...#..#...+ -#..........# -#..........# -#..........# +#.#.....#..# +#.#.....#..# ####+++##### -spawn 5 6 0.95 brute:3 shambler:2 -spawn 2 4 0.70 spitter:2 rusher:2 -spawn 9 4 0.70 spitter:2 rusher:2 -spawn 6 10 0.60 shambler:3 lurker:1 -spawn 2 9 0.40 barrel:2 crate:1 +spawn 9 10 0.95 brute:3 shambler:2 +spawn 2 5 0.70 spitter:2 rusher:2 +spawn 9 5 0.70 spitter:2 rusher:2 +spawn 6 8 0.60 shambler:3 lurker:1 +spawn 5 1 0.40 barrel:2 crate:1 diff --git a/projects/descent/rooms/storage.room b/projects/descent/rooms/storage.room index 20565f4..2a33b49 100644 --- a/projects/descent/rooms/storage.room +++ b/projects/descent/rooms/storage.room @@ -1,9 +1,8 @@ # Склад: обстановки много, тварей мало. Место, где игрок узнаёт, что хлам # ломается, — и тратит на это магазин, которого потом не хватит. # -# Стеллаж стал одним глухим блоком посередине, а обход вокруг него — трёхрядным. -# Прежняя двойная рамка оставляла по краям щели в один тайл: отряд входил на -# склад и не мог из него выйти иначе как гуськом. +# Стеллажи стоят вдоль стен, а не двойной рамкой посередине: рамка оставляла по +# краям щели в один тайл, и отряд входил на склад, а выходил из него гуськом. name storage size 12 10 weight 2 @@ -12,16 +11,16 @@ start 0 depth 1 0 tiles ####+++##### +#.#......#.# +#.#......#.# #..........# -#..........# -#...####...# -+...####...+ -+...####...+ ++..........+ ++..........+ +..........+ #..........# -#..........# +#.#......#.# ####+++##### -spawn 2 4 0.90 crate:4 barrel:3 locker:2 -spawn 9 4 0.85 crate:3 barrel:2 -spawn 5 7 0.70 barrel:2 locker:2 -spawn 1 1 0.45 shambler:2 lurker:1 +spawn 4 1 0.90 crate:4 barrel:3 locker:2 +spawn 8 1 0.85 crate:3 barrel:2 +spawn 4 8 0.70 barrel:2 locker:2 +spawn 1 4 0.45 shambler:2 lurker:1 diff --git a/projects/descent/rooms/vault.room b/projects/descent/rooms/vault.room index c36c245..beebfa3 100644 --- a/projects/descent/rooms/vault.room +++ b/projects/descent/rooms/vault.room @@ -1,27 +1,27 @@ -# Схрон: тесная комната с глухим сейфом посередине. Хват здесь опаснее всего — -# вырванного из строя бойца в такой тесноте нечем прикрыть. +# Схрон: самая маленькая комната набора. Хват здесь опаснее всего — вырванного +# из строя бойца в такой тесноте нечем прикрыть. # -# Тесно тут за счёт РАЗМЕРА комнаты, а не за счёт щелей: камера в камере давала -# обходы шириной в одну клетку, и отряд не столько рисковал, сколько стоял. -# Обход теперь трёхрядный, а схрон всё равно самая маленькая комната набора. +# Тесно тут за счёт РАЗМЕРА, а не за счёт щелей: камера в камере давала обходы +# шириной в одну клетку, и отряд в схроне не рисковал, а стоял. name vault -size 10 10 +size 11 11 weight 1 theme 3 start 0 depth 8 0 tiles -####+++### -#........# -#........# -#........# -+...##...+ -+...##...+ -+...##...+ -#........# -#........# -####+++### -spawn 7 5 0.90 lurker:3 brute:1 -spawn 1 1 0.55 rusher:2 shambler:1 -spawn 8 8 0.55 spitter:2 -spawn 4 8 0.40 locker:2 crate:1 +####+++#### +#.#.....#.# +#.#.....#.# +#.........# ++.........+ ++.........+ ++.........+ +#.........# +#.#.....#.# +#.#.....#.# +####+++#### +spawn 5 5 0.90 lurker:3 brute:1 +spawn 4 1 0.55 rusher:2 shambler:1 +spawn 6 9 0.55 spitter:2 +spawn 4 9 0.40 locker:2 crate:1 diff --git a/projects/hollow/rooms/cells.room b/projects/hollow/rooms/cells.room index 25aaee5..5631007 100644 --- a/projects/hollow/rooms/cells.room +++ b/projects/hollow/rooms/cells.room @@ -1,7 +1,8 @@ # Ряд камер. Ниши по бокам: в них удобно стоять и невозможно отступать. # -# Ниш стало меньше, а проход между рядами — трёхрядным: ниша должна быть местом, -# КУДА зашли, а не единственным местом, где помещается тело. +# Ниш стало вдвое меньше, и стоят они у самых стен. Прежний частокол оставлял +# между камерами проходы в одну клетку: ниша должна быть местом, КУДА зашли, +# а не единственным местом, где помещается тело. name cells size 12 9 weight 3 @@ -9,14 +10,14 @@ theme 0 depth 1 0 tiles ####+++##### +#.#......#.# #..........# -#.#.#..#.#.# +..........+ +..........+ +..........+ -#.#.#..#.#.# #..........# +#.#......#.# ####+++##### -spawn 2 1 0.65 rusher:3 shambler:2 -spawn 10 7 0.65 rusher:3 shambler:2 +spawn 4 1 0.65 rusher:3 shambler:2 +spawn 8 7 0.65 rusher:3 shambler:2 spawn 6 4 0.40 bandage:2 knife:1 rifle:1 diff --git a/projects/hollow/rooms/maw.room b/projects/hollow/rooms/maw.room index 152fafe..1c6e4e0 100644 --- a/projects/hollow/rooms/maw.room +++ b/projects/hollow/rooms/maw.room @@ -1,12 +1,11 @@ -# Зев. Открытая арена с ядром посередине: единственное место в наборе, где -# отряд может встать кругом. +# Зев. Открытая арена: единственное место в наборе, где отряд может встать +# кругом, — а встать кругом впятером нельзя нигде, где проход уже четырёх тайлов. # -# У ядра ДВА прохода, север и юг. Глухая коробка посередине выглядит на сетке -# так же, но точка спавна внутри неё недостижима: тварь не дойдёт до отряда и -# не будет убита, и этаж тихо станет легче. Ровно это и ловит --check. -# -# Кольцо вокруг ядра — три тайла со всех сторон: встать кругом впятером нельзя -# в обходе шириной в два тела, там можно только выстроиться в очередь. +# Ядро посередине пришлось убрать не ради простора, а ради проходимости: оно +# стояло ровно на линии между дверями и ловило строй всей шириной. Урок, ради +# которого его когда-то рисовали, остался в силе: точка спавна в глухой коробке +# недостижима, тварь до отряда не дойдёт, и этаж тихо станет легче. Ровно это +# и ловит --check. name maw size 12 11 weight 2 @@ -14,17 +13,17 @@ theme 2 depth 3 0 tiles ####+++##### +#.#......#.# +#.#......#.# #..........# ++..........+ ++..........+ ++..........+ #..........# -#..........# -#...#..#...# -+...#..#...+ -+...#..#...+ -+...#..#...+ -#...#..#...# -#..........# +#.#......#.# +#.#......#.# ####+++##### spawn 6 5 0.85 brute:3 lurker:2 -spawn 1 1 0.60 spitter:2 rusher:2 -spawn 10 9 0.60 spitter:2 rusher:2 -spawn 10 1 0.45 shotgun:1 plate:1 cleaver:1 +spawn 4 1 0.60 spitter:2 rusher:2 +spawn 8 9 0.60 spitter:2 rusher:2 +spawn 8 1 0.45 shotgun:1 plate:1 cleaver:1 diff --git a/projects/hollow/rooms/mouth.room b/projects/hollow/rooms/mouth.room index 041466d..5a9f34f 100644 --- a/projects/hollow/rooms/mouth.room +++ b/projects/hollow/rooms/mouth.room @@ -1,9 +1,8 @@ # Стартовая HOLLOW. Тесная и короткая: вид сверху показывает всю комнату # сразу, и просторный зал первого этажа не оставил бы ничего на потом. # -# Тесная — по размеру, а не по проходам. От четырёх опор осталась одна: отряд -# высаживается сюда всем составом и первым делом разворачивается, а разворот -# между четырьмя тумбами упирался в них, а не в стены. +# Тесная — по РАЗМЕРУ, а не по проходам. Четыре тумбы посередине стояли ровно +# там, где отряд разворачивается после высадки, и разворот в них упирался. name mouth size 11 9 weight 2 @@ -12,13 +11,13 @@ start 1 depth 1 0 tiles ####+++#### -#.........# +#.#.....#.# #.........# +.........+ -+....#....+ ++.........+ +.........+ #.........# -#.........# +#.#.....#.# ####+++#### -spawn 2 1 0.45 barrel:1 -spawn 8 7 0.45 barrel:1 +spawn 4 1 0.45 barrel:1 +spawn 6 7 0.45 barrel:1 diff --git a/projects/hollow/rooms/shaft.room b/projects/hollow/rooms/shaft.room index a51b167..2dcba7a 100644 --- a/projects/hollow/rooms/shaft.room +++ b/projects/hollow/rooms/shaft.room @@ -1,9 +1,9 @@ # Колодец. Узкий и длинный: строй здесь не развернуть, и это единственное, # что комната делает. # -# «Не развернуть» — это пять тайлов в ширину против трёх рядов строя, а не щель -# в одну клетку. Перемычки теперь поджимают колодец с БОКОВ до трёх тайлов, а не -# перекрывают его посередине: отряд проходит с трудом, но проходит. +# «Не развернуть» — это пять тайлов в ширину против четырёх, которые занимает +# строй, а не щель в одну клетку. Перемычки поперёк колодца убраны: они не +# сжимали отряд, они его останавливали. name shaft size 7 12 weight 2 @@ -13,11 +13,11 @@ tiles ##+++## #.....# #.....# -##...## +#.....# +.....+ +.....+ +.....+ -##...## +#.....# #.....# #.....# #.....# diff --git a/src/ui/menu.cpp b/src/ui/menu.cpp index f5b873c..41107ab 100644 --- a/src/ui/menu.cpp +++ b/src/ui/menu.cpp @@ -151,8 +151,11 @@ constexpr int SQ_HINT_Y = 250, SQ_HINT_STEP = 10; // Схрон: то, что лежит на базе между вылазками. Двумя рядами во всю ширину // внизу, а не колонкой сбоку: в схроне десятки предметов, и подпись каждого // должна читаться — иначе выбор снаряжения превращается в перебор иконок. -constexpr int SQ_STASH_X = 22, SQ_STASH_Y = 208, SQ_STASH_W = 52, SQ_STASH_H = 18; -constexpr int SQ_STASH_GX = 4, SQ_STASH_GY = 3, SQ_STASH_COLS = 8, SQ_STASH_ROWS = 2; +// Ячейка схрона шире, а колонок меньше: в 52 пикселя не влезало даже слово +// BATTERY, и половина имён обрезалась на середине. Читаемость важнее, чем ещё +// две ячейки в ряду: прокрутка есть, а угадывать вещь по обрубку — нет. +constexpr int SQ_STASH_X = 16, SQ_STASH_Y = 206, SQ_STASH_W = 74, SQ_STASH_H = 18; +constexpr int SQ_STASH_GX = 4, SQ_STASH_GY = 3, SQ_STASH_COLS = 6, SQ_STASH_ROWS = 2; constexpr int SQ_STASH_CELLS = SQ_STASH_COLS * SQ_STASH_ROWS; // Мастерская. Слева схрон той же сеткой, что и на экране отряда (привычка @@ -385,9 +388,16 @@ void DrawTip(const Layout& l, const Tip& t, int mx, int my) int wide = 0; for (int i = 0; i < t.count; ++i) wide = std::max(wide, TextW(l, t.lines[i], 8)); - UiRect box{mx + 8, my + 8, wide + pad * 2, t.count * step + pad * 2 - 2}; - // Подсказка не должна вылезать за кадр: у края экрана она переезжает на - // другую сторону курсора, а не обрезается. + // Подсказка встаёт ВЫШЕ курсора, а не ниже. + // + // Ниже она ложилась ровно на строки характеристик — те самые, которые + // объясняет: игрок наводил на броню, чтобы понять, откуда 28%, и подсказка + // закрывала строку ARMOR. Сверху под ней только пустое место. + UiRect box{mx + 8, my - 6 - (t.count * step + pad * 2 - 2), wide + pad * 2, + t.count * step + pad * 2 - 2}; + + // И не должна вылезать за кадр: у края экрана она переезжает на другую + // сторону курсора, а не обрезается. if (box.x + box.w > INTERNAL_W - 2) box.x = mx - 8 - box.w; if (box.y + box.h > INTERNAL_H - 2) box.y = INTERNAL_H - 2 - box.h; if (box.x < 2) box.x = 2; @@ -545,11 +555,13 @@ void BuildWidgets(const Ui& ui, const Game& game, const Layout& l, Widgets& out) } // Сумка ОБЩАЯ: она не зависит от выбранного бойца, и переложить - // из неё может любой (sim/items.h). + // из неё может любой (sim/items.h). Вне вылазки она недоступна: + // сумка принадлежит забегу и очищается при сборке этажа. for (int s = 0; s < SQUAD_BAG_SLOTS; ++s) { Widget& w = out.Add(UiPart::BAG, s, BagRect(s)); w.item = game.squad.bag.slots[s]; + w.enabled = ui.started; } // Строки характеристик тоже наводимы. Читать «SPEED 95%» и гадать, @@ -1364,7 +1376,10 @@ void DrawSquadScreen(const Layout& l, const Game& game, const Ui& ui, const Widg } } - Text(l, "BAG", SQ_BAG_X, SQ_BAG_Y - 14, 10, COL_TEXT); + // Подпись честно говорит, почему сумка не берёт вещи вне забега. Молчащий + // отказ читается как поломка — а это правило: сумка принадлежит вылазке. + if (ui.started) Text(l, "BAG", SQ_BAG_X, SQ_BAG_Y - 14, 10, COL_TEXT); + else Text(l, "BAG - RAID ONLY", SQ_BAG_X, SQ_BAG_Y - 14, 8, COL_DEAD); if (game.profile) {