Skip to content

[Tweak] TG13 Floor Tiles & Decals Overhaul - #180

Open
UmbiMax wants to merge 12 commits into
ArcaneSS14:masterfrom
OSAS-corp:TileSprites
Open

[Tweak] TG13 Floor Tiles & Decals Overhaul#180
UmbiMax wants to merge 12 commits into
ArcaneSS14:masterfrom
OSAS-corp:TileSprites

Conversation

@UmbiMax

@UmbiMax UmbiMax commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator

Описание PR

Перенос спрайтов с TG13
Взял основу переноса с закрытого на Trauma Station PR Trauma-Station/Trauma-Station#3728
С декалями проблем ещё больше. Пришлось респрайтить ВСЕ, абсолютно ВСЕ основные декали под TG стиль, на что и ушло чуть ли не 7 часов, не учитывая тесты и проверки.
И не меньше проблем было с респрайтами остальных тайлов и решёток, которых не было на TG13.

Лишь глянув на авторские права, я сильно огорчился. Дело не в доступе да ограничения, а в том, что в PR-е из траумы вовсе не было изменений у attributions, из-за чего пришлось самому разгребать все изменения.

Но итог один. Общий стиль станции стал намного лучше. Мы всё дальше и дальше отходим от дерьмовых и старых спрайтов, не позволяя игрокам продолжать впитывать старое говно.

Медиа

16909df1-2b3a-4fd7-bec1-4e50a1e2e40b image f19e0f9d-271d-4d0c-bbdf-3dc12926d473

Тип PR

  • Feature
  • Fix
  • Tweak
  • Balance
  • Refactor
  • Port
  • Translate
  • Resprite

Лицензионное соглашение

  • Я согласен с лицензионным соглашением Contributor License Agreement, для Arcane SS14 Organization.

Изменения

🆑

  • tweak: Портированы спрайты тайлов с TG13.
  • tweak: Полностью переработаны спрайты основных декалей и всех иных тайлов под единый стиль.

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

RSI Diff Bot; head commit 4825661 merging into 5eff5fe
This PR makes changes to 1 or more RSIs. Here is a summary of all changes:

Resources/Textures/Decals/Overlays/greyscale.rsi

State Old New Status
brick_box Modified
brick_corner_ne Modified
brick_corner_nw Modified
brick_corner_se Modified
brick_corner_sw Modified
brick_end_e Modified
brick_end_n Modified
brick_end_s Modified
brick_end_w Modified
brick_line_e Modified
brick_line_n Modified
brick_line_s Modified
brick_line_w Modified
checkerNESW Modified
checkerNWSE Modified
diagonal Modified
diagonal_checker_a Modified
diagonal_checker_b Modified
fulltile_overlay Modified
halftile_overlay Modified
halftile_overlay_180 Modified
halftile_overlay_270 Modified
halftile_overlay_90 Modified
herringbone Modified
minitile Modified
minitile_box Modified
minitile_checker_a Modified
minitile_checker_b Modified
minitile_corner_ne Modified
minitile_corner_nw Modified
minitile_corner_se Modified
minitile_corner_sw Modified
minitile_diagonal Modified
minitile_diagonal_a Modified
minitile_diagonal_b Modified
minitile_end_e Modified
minitile_end_n Modified
minitile_end_s Modified
minitile_end_w Modified
minitile_inner_ne Modified
minitile_inner_nw Modified
minitile_inner_se Modified
minitile_inner_sw Modified
minitile_line_e Modified
minitile_line_n Modified
minitile_line_s Modified
minitile_line_w Modified
mono Modified
offset Modified
offset_checker_a Modified
offset_checker_b Modified
pavement Modified
pavement_checker_a Modified
pavement_checker_b Modified
pavement_vertical Modified
pavement_vertical_checker_a Modified
pavement_vertical_checker_b Modified
quartertile_overlay Modified
quartertile_overlay_180 Modified
quartertile_overlay_270 Modified
quartertile_overlay_90 Modified
threequartertile_overlay Modified
threequartertile_overlay_180 Modified
threequartertile_overlay_270 Modified
threequartertile_overlay_90 Modified

Resources/Textures/Decals/bricktile.rsi

State Old New Status
dark_box Modified
dark_corner_ne Modified
dark_corner_nw Modified
dark_corner_se Modified
dark_corner_sw Modified
dark_end_e Modified
dark_end_n Modified
dark_end_s Modified
dark_end_w Modified
dark_inner_ne Modified
dark_inner_nw Modified
dark_inner_se Modified
dark_inner_sw Modified
dark_line_e Modified
dark_line_n Modified
dark_line_s Modified
dark_line_w Modified
steel_box Modified
steel_corner_ne Modified
steel_corner_nw Modified
steel_corner_se Modified
steel_corner_sw Modified
steel_end_e Modified
steel_end_n Modified
steel_end_s Modified
steel_end_w Modified
steel_inner_ne Modified
steel_inner_nw Modified
steel_inner_se Modified
steel_inner_sw Modified
steel_line_e Modified
steel_line_n Modified
steel_line_s Modified
steel_line_w Modified
white_box Modified
white_corner_ne Modified
white_corner_nw Modified
white_corner_se Modified
white_corner_sw Modified
white_end_e Modified
white_end_n Modified
white_end_s Modified
white_end_w Modified
white_inner_ne Modified
white_inner_nw Modified
white_inner_se Modified
white_inner_sw Modified
white_line_e Modified
white_line_n Modified
white_line_s Modified
white_line_w Modified

Resources/Textures/Decals/minitile.rsi

State Old New Status
dark_box Modified
dark_corner_ne Modified
dark_corner_nw Modified
dark_corner_se Modified
dark_corner_sw Modified
dark_end_e Modified
dark_end_n Modified
dark_end_s Modified
dark_end_w Modified
dark_inner_ne Modified
dark_inner_nw Modified
dark_inner_se Modified
dark_inner_sw Modified
dark_line_e Modified
dark_line_n Modified
dark_line_s Modified
dark_line_w Modified
steel_box Modified
steel_corner_ne Modified
steel_corner_nw Modified
steel_corner_se Modified
steel_corner_sw Modified
steel_end_e Modified
steel_end_n Modified
steel_end_s Modified
steel_end_w Modified
steel_inner_ne Modified
steel_inner_nw Modified
steel_inner_se Modified
steel_inner_sw Modified
steel_line_e Modified
steel_line_n Modified
steel_line_s Modified
steel_line_w Modified
white_box Modified
white_corner_ne Modified
white_corner_nw Modified
white_corner_se Modified
white_corner_sw Modified
white_end_e Modified
white_end_n Modified
white_end_s Modified
white_end_w Modified
white_inner_ne Modified
white_inner_nw Modified
white_inner_se Modified
white_inner_sw Modified
white_line_e Modified
white_line_n Modified
white_line_s Modified
white_line_w Modified

Edit: diff updated after 4825661

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Главное изменение

Обновлены ресурсные данные для TG13-стиля плиток и декалей.
bricktile.rsi и minitile.rsi переведены на новый формат метаданных.
В Resources/Textures/Tiles/attributions.yml переработаны атрибуции для наборов TG/TauCetiStation, asteroid_*, rglass, wood_large и ксеноплиток.
Старые объединённые записи для стальных плиток разделены.
Удалена SPDX-строка в начале файла.

Resources / localization

Затронуты только RSI meta и атрибуции ресурсов.
FTL и другие локали не менялись.
Переездов prototype ID нет.

Validation / risk

Runtime-проверки и тесты не указаны.
Риск низкий.
Основной риск — регрессии в отображении декалей и в корректности атрибуций после переразбивки записей.

Walkthrough

Обновлены версии метаданных двух декалей. Дополнены сведения об авторстве и респритах для декалей и наборов плиток. Записи стальных плиток разделены, а четыре записи ксеноплиток удалены.

Changes

Метаданные и авторство текстур

Layer / File(s) Summary
Метаданные декалей
Resources/Textures/Decals/*/meta.json
Версия метаданных bricktile и minitile изменена с 1 на 3. Поля copyright дополнены сведениями о переработке и повторном рендеринге.
Авторство наборов плиток
Resources/Textures/Tiles/attributions.yml
Обновлены сведения об авторах астероидных, стальных, стеклянных и деревянных плиток. Записи стальных плиток разделены. Удалены четыре записи ксеноплиток.

Estimated code review effort: 1 (Trivial) | ~5 минут

Suggested reviewers: puroslavking

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed Заголовок точно описывает основной объём изменений: переработку тайлов полов и декалей в стиле TG13.
Description check ✅ Passed Описание связано с изменениями и содержит сведения о переносе, переработке спрайтов и обновлении атрибуций.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Resources/Textures/Tiles/attributions.yml (1)

142-143: 🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win

Восстановите атрибьюцию для сохранённых PNG.

В ресурсах остались Resources/Textures/Tiles/xeno_steel_corner.png, Resources/Textures/Tiles/xeno_steel.png, Resources/Textures/Tiles/xeno_flooring.png, Resources/Textures/Tiles/xeno_maint.png и Resources/Textures/Tiles/dark_squiggly.png. Если хотя бы один из них используется, запись в Resources/Textures/Tiles/attributions.yml не удаляйте; иначе файлы останутся без обязательной атрибуции.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@Resources/Textures/Tiles/attributions.yml` around lines 142 - 143, Restore
the attribution entry in attributions.yml for the retained
xeno_steel_corner.png, xeno_steel.png, xeno_flooring.png, xeno_maint.png, and
dark_squiggly.png resources, preserving it whenever any of these files remains
used.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@Resources/Textures/Decals/bricktile.rsi/meta.json`:
- Around line 2-4: В обоих RSI-файлах —
Resources/Textures/Decals/bricktile.rsi/meta.json (строки 2-4) и
Resources/Textures/Decals/minitile.rsi/meta.json (строки 2-4) — замените
значение version с 3 на 1, оставив остальные поля без изменений.

In `@Resources/Textures/Tiles/attributions.yml`:
- Around line 59-61: Remove steel_dirty.png from the older attribution entry in
the YAML file, leaving it only in the newer attribution entry so CreditsWindow
does not display duplicate credits.
- Around line 21-22: Согласуйте поля copyright и source для стальных плиток в
записи атрибуции: source должен содержать ссылки на оба указанных источника,
либо удалите из copyright источник, которого нет в source. Сохраните единое
отображение согласованных источников в CreditsWindow.

---

Outside diff comments:
In `@Resources/Textures/Tiles/attributions.yml`:
- Around line 142-143: Restore the attribution entry in attributions.yml for the
retained xeno_steel_corner.png, xeno_steel.png, xeno_flooring.png,
xeno_maint.png, and dark_squiggly.png resources, preserving it whenever any of
these files remains used.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: cfe49410-8f9b-4e47-9fa6-99e35818d70d

📥 Commits

Reviewing files that changed from the base of the PR and between 5eff5fe and 7b6a8a6.

⛔ Files ignored due to path filters (233)
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_box.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_corner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_corner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_corner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_corner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_end_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_end_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_end_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_end_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_line_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_line_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_line_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/brick_line_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/checkerNESW.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/checkerNWSE.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/diagonal.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/diagonal_checker_a.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/diagonal_checker_b.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/fulltile_overlay.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/halftile_overlay.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/halftile_overlay_180.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/halftile_overlay_270.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/halftile_overlay_90.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/herringbone.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_box.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_checker_a.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_checker_b.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_corner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_corner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_corner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_corner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_diagonal.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_diagonal_a.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_diagonal_b.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_end_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_end_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_end_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_end_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_inner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_inner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_inner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_inner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_line_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_line_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_line_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/minitile_line_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/mono.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/offset.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/offset_checker_a.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/offset_checker_b.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/pavement.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/pavement_checker_a.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/pavement_checker_b.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/pavement_vertical.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/pavement_vertical_checker_a.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/pavement_vertical_checker_b.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/quartertile_overlay.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/quartertile_overlay_180.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/quartertile_overlay_270.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/quartertile_overlay_90.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/threequartertile_overlay.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/threequartertile_overlay_180.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/threequartertile_overlay_270.png is excluded by !**/*.png
  • Resources/Textures/Decals/Overlays/greyscale.rsi/threequartertile_overlay_90.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_box.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_corner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_corner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_corner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_corner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_end_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_end_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_end_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_end_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_inner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_inner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_inner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_inner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_line_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_line_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_line_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/dark_line_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_box.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_corner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_corner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_corner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_corner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_end_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_end_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_end_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_end_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_inner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_inner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_inner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_inner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_line_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_line_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_line_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/steel_line_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_box.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_corner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_corner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_corner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_corner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_end_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_end_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_end_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_end_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_inner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_inner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_inner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_inner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_line_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_line_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_line_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/bricktile.rsi/white_line_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_box.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_corner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_corner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_corner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_corner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_end_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_end_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_end_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_end_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_inner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_inner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_inner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_inner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_line_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_line_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_line_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/dark_line_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_box.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_corner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_corner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_corner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_corner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_end_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_end_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_end_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_end_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_inner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_inner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_inner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_inner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_line_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_line_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_line_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/steel_line_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_box.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_corner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_corner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_corner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_corner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_end_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_end_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_end_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_end_w.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_inner_ne.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_inner_nw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_inner_se.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_inner_sw.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_line_e.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_line_n.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_line_s.png is excluded by !**/*.png
  • Resources/Textures/Decals/minitile.rsi/white_line_w.png is excluded by !**/*.png
  • Resources/Textures/Tiles/Asteroid/asteroid_plating.png is excluded by !**/*.png
  • Resources/Textures/Tiles/arcadeblue2.png is excluded by !**/*.png
  • Resources/Textures/Tiles/bar.png is excluded by !**/*.png
  • Resources/Textures/Tiles/blue.png is excluded by !**/*.png
  • Resources/Textures/Tiles/cafeteria.png is excluded by !**/*.png
  • Resources/Textures/Tiles/checker_dark.png is excluded by !**/*.png
  • Resources/Textures/Tiles/clown.png is excluded by !**/*.png
  • Resources/Textures/Tiles/dark.png is excluded by !**/*.png
  • Resources/Textures/Tiles/dark_diagonal.png is excluded by !**/*.png
  • Resources/Textures/Tiles/dark_diagonal_mini.png is excluded by !**/*.png
  • Resources/Textures/Tiles/dark_herringbone.png is excluded by !**/*.png
  • Resources/Textures/Tiles/dark_mini.png is excluded by !**/*.png
  • Resources/Textures/Tiles/dark_mono.png is excluded by !**/*.png
  • Resources/Textures/Tiles/dark_offset.png is excluded by !**/*.png
  • Resources/Textures/Tiles/dark_pavement.png is excluded by !**/*.png
  • Resources/Textures/Tiles/dark_pavement_vertical.png is excluded by !**/*.png
  • Resources/Textures/Tiles/dark_plastic.png is excluded by !**/*.png
  • Resources/Textures/Tiles/elevator_shaft.png is excluded by !**/*.png
  • Resources/Textures/Tiles/freezer.png is excluded by !**/*.png
  • Resources/Textures/Tiles/glass.png is excluded by !**/*.png
  • Resources/Textures/Tiles/gold.png is excluded by !**/*.png
  • Resources/Textures/Tiles/hydro.png is excluded by !**/*.png
  • Resources/Textures/Tiles/kitchen.png is excluded by !**/*.png
  • Resources/Textures/Tiles/laundry.png is excluded by !**/*.png
  • Resources/Textures/Tiles/lime.png is excluded by !**/*.png
  • Resources/Textures/Tiles/mime.png is excluded by !**/*.png
  • Resources/Textures/Tiles/mining_floor.png is excluded by !**/*.png
  • Resources/Textures/Tiles/mining_floor_dark.png is excluded by !**/*.png
  • Resources/Textures/Tiles/mining_floor_light.png is excluded by !**/*.png
  • Resources/Textures/Tiles/mono.png is excluded by !**/*.png
  • Resources/Textures/Tiles/plastic.png is excluded by !**/*.png
  • Resources/Textures/Tiles/rglass.png is excluded by !**/*.png
  • Resources/Textures/Tiles/showroom.png is excluded by !**/*.png
  • Resources/Textures/Tiles/shuttleblack.png is excluded by !**/*.png
  • Resources/Textures/Tiles/shuttleblue.png is excluded by !**/*.png
  • Resources/Textures/Tiles/shuttlegrey.png is excluded by !**/*.png
  • Resources/Textures/Tiles/shuttleorange.png is excluded by !**/*.png
  • Resources/Textures/Tiles/shuttlepurple.png is excluded by !**/*.png
  • Resources/Textures/Tiles/shuttlered.png is excluded by !**/*.png
  • Resources/Textures/Tiles/shuttlewhite.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel_damaged.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel_diagonal.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel_diagonal_mini.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel_dirty.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel_herringbone.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel_mini.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel_mono.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel_offset.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel_pavement.png is excluded by !**/*.png
  • Resources/Textures/Tiles/steel_pavement_vertical.png is excluded by !**/*.png
  • Resources/Textures/Tiles/super_reinforced.png is excluded by !**/*.png
  • Resources/Textures/Tiles/white.png is excluded by !**/*.png
  • Resources/Textures/Tiles/white_diagonal.png is excluded by !**/*.png
  • Resources/Textures/Tiles/white_diagonal_mini.png is excluded by !**/*.png
  • Resources/Textures/Tiles/white_herringbone.png is excluded by !**/*.png
  • Resources/Textures/Tiles/white_mini.png is excluded by !**/*.png
  • Resources/Textures/Tiles/white_mono.png is excluded by !**/*.png
  • Resources/Textures/Tiles/white_offset.png is excluded by !**/*.png
  • Resources/Textures/Tiles/white_pavement.png is excluded by !**/*.png
  • Resources/Textures/Tiles/white_pavement_vertical.png is excluded by !**/*.png
  • Resources/Textures/Tiles/wood.png is excluded by !**/*.png
  • Resources/Textures/Tiles/wood_broken.png is excluded by !**/*.png
  • Resources/Textures/Tiles/wood_large.png is excluded by !**/*.png
  • Resources/Textures/Tiles/wood_tile.png is excluded by !**/*.png
  • Resources/Textures/Tiles/xeno_steel_corner.png is excluded by !**/*.png
📒 Files selected for processing (3)
  • Resources/Textures/Decals/bricktile.rsi/meta.json
  • Resources/Textures/Decals/minitile.rsi/meta.json
  • Resources/Textures/Tiles/attributions.yml
📜 Review details
⏰ Context from checks skipped due to timeout. (6)
  • GitHub Check: Test Packaging
  • GitHub Check: YAML Linter
  • GitHub Check: Validate RSIs
  • GitHub Check: build (ubuntu-latest)
  • GitHub Check: YAML map schema validator
  • GitHub Check: build (ubuntu-latest)
🧰 Additional context used
📓 Path-based instructions (5)
Resources/**/*.{yml,ftl,json}

📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)

Resources/**/*.{yml,ftl,json}: Follow SS14 naming conventions when editing prototype, localization, and resource files
Follow SS14 upstream maintenance practices when editing resource files

Files:

  • Resources/Textures/Decals/bricktile.rsi/meta.json
  • Resources/Textures/Decals/minitile.rsi/meta.json
  • Resources/Textures/Tiles/attributions.yml
Resources/**/*.json

📄 CodeRabbit inference engine (AGENTS.md)

Keep RSI meta.json ordered as version, license, copyright, size, states with 4-space indentation.

Files:

  • Resources/Textures/Decals/bricktile.rsi/meta.json
  • Resources/Textures/Decals/minitile.rsi/meta.json

⚙️ CodeRabbit configuration file

Resources/**/*.json: Review resource JSON files for path correctness and consistency.
For RSI meta.json files, check ordering, state/layout consistency, and whether referenced prototypes or visualizers still match the available states.

Files:

  • Resources/Textures/Decals/bricktile.rsi/meta.json
  • Resources/Textures/Decals/minitile.rsi/meta.json
Resources/**/*.yml

📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)

Resources/**/*.yml: Follow SS14 ECS prototype patterns and conventions
Follow SS14 graphics generic visualizer appearance conventions and patterns

Resources/**/*.yml: Load ss14-naming-conventions documentation for Resources work
Load ss14-ecs-prototypes documentation for Resources work
Load ss14-upstream-maintenance documentation for Resources work
Load ss14-prototypes-locale documentation for Resources work
Load ss14-localization-strings documentation for Resources work
Load ss14-sprite-overlays-shaders documentation when working with RSI metadata, textures, sprite layers, overlays, or shader resources
Validate YAML after edits

Run dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj -c DebugOpt to validate YAML and resource edits.

Files:

  • Resources/Textures/Tiles/attributions.yml
Resources/**/*.{yml,ftl}

📄 CodeRabbit inference engine (.cursor/rules/ss14-resources.mdc)

Follow SS14 prototype locale integration rules and practices

Files:

  • Resources/Textures/Tiles/attributions.yml
**/*.{cs,xaml,yml,yaml}

📄 CodeRabbit inference engine (AGENTS.md)

If the task adds tests or you need to choose the right test layer, load skill ss14-tests-authoring.

Files:

  • Resources/Textures/Tiles/attributions.yml
🧠 Learnings (3)
📚 Learning: 2026-07-26T02:48:44.443Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane PR: 136
File: Resources/Textures/Clothing/Back/Duffels/captain.rsi/meta.json:4-4
Timestamp: 2026-07-26T02:48:44.443Z
Learning: In `Resources/Textures/**/**/*.rsi/meta.json`, if the PR replaces sprite assets with sources that do not include the previous credit holders (e.g., the new sprites come from another upstream/source), do not keep attribution/author fields for contributors who made no contribution to the current assets. Update the attribution to reflect the actual authors/sources of the sprites currently referenced by the .rsi.

Applied to files:

  • Resources/Textures/Decals/bricktile.rsi/meta.json
  • Resources/Textures/Decals/minitile.rsi/meta.json
📚 Learning: 2026-07-07T17:55:50.395Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane-old PR: 101
File: Content.Client/Chemistry/UI/ChemMasterWindow.xaml.cs:192-194
Timestamp: 2026-07-07T17:55:50.395Z
Learning: When reviewing ArcaneSS14/arcane-old changes related to `MobState` thresholds/visuals/actions, treat the `Critical` enum value as requiring explicit mappings (it no longer implicitly behaves as an alias of `SoftCritical`). If any YAML prototype `thresholds:` (for `MobThresholdsComponent.Thresholds`) uses the bare `Critical` key (e.g., `MobThresholdsComponent.Thresholds: { Critical: ... }` for entities like `MobMouseCancer`), ensure the prototype (or referenced config) provides corresponding explicit `StateAlertDict` entries and any required `MobStateActions.actions` and `DamageStateVisuals.states` mappings for `Critical`. Otherwise, review should expect failures because the default `StateAlertDict` in `MobThresholdsComponent.cs` typically maps only `Alive`, `SoftCritical`, `HardCritical`, and `Dead`—not `Critical`.

Applied to files:

  • Resources/Textures/Tiles/attributions.yml
📚 Learning: 2026-07-28T15:44:38.498Z
Learnt from: UmbiMax
Repo: ArcaneSS14/arcane PR: 152
File: Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/pistol.yml:69-72
Timestamp: 2026-07-28T15:44:38.498Z
Learning: В ArcaneSS14/arcane не выполняйте форматирующие перестановки полей (в т.ч. изменение порядка полей) в upstream-файлах: делайте это только если правка добавляет Arcane-специфичную сущность или напрямую требуется для функциональности. Иначе сохраняйте upstream-порядок полей, даже если он противоречит локальным рекомендациям, чтобы не создавать лишние diff и конфликты при upstream-синхронизации. Исключение: допустимо переупорядочивание/форматирование в `Resources/Prototypes/_Arcane` (и только там).

Applied to files:

  • Resources/Textures/Tiles/attributions.yml
🔇 Additional comments (2)
Resources/Textures/Tiles/attributions.yml (2)

11-11: LGTM!

Also applies to: 41-41, 51-51, 131-131


59-61: 📐 Maintainability & Code Quality

Запустите обязательную проверку YAML.

После исправлений выполните:

dotnet run --project Content.YAMLLinter/Content.YAMLLinter.csproj -c DebugOpt

As per coding guidelines: файлы Resources/**/*.yml необходимо валидировать этим линтером.

Comment thread Resources/Textures/Decals/bricktile.rsi/meta.json Outdated
Comment thread Resources/Textures/Tiles/attributions.yml Outdated
Comment thread Resources/Textures/Tiles/attributions.yml Outdated
@UmbiMax

UmbiMax commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai Я имею такие спрайты для lattice.png, чтобы можно было отображать подключение к любой стороне, но как это тут бы реализовать, как и сделано у стен, но теперь с покрытием? Само собой сообщи требуемый порядок текстур в файле спрайта и для каких сторон.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== lattice files =='
fd -HI -i 'lattice' . | sort

printf '%s\n' '== lattice references =='
rg -n -i -C 3 '\blattice\b|lattice\.png|lattice\.rsi' . \
  -g '!**/.git/**' -g '!**/bin/**' -g '!**/obj/**' || true

printf '%s\n' '== wall auto-tiling / adjacency references =='
rg -n -i -C 3 'auto.?tile|autotile|adjacen|neighbor|connect(ion|ed)?|edge mask|bitmask|Cardinal' \
  Content.Server Content.Shared Resources 2>/dev/null || true

printf '%s\n' '== candidate sprite metadata =='
fd -HI '(meta\.json|.*\.yml|.*\.yaml)' Resources \
  -x sh -c 'rg -l -i "lattice|wall" "$1" 2>/dev/null || true' sh {} \
  | sort -u

Length of output: 193356


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== lattice/girder/grille prototype declarations =='
rg -n -i -C 18 '(^\s*id:\s*.*(lattice|girder|grille)|^\s*-\s*type:\s*IconSmooth|^\s*mode:\s*CardinalFlags|^\s*base:)' \
  Resources/Prototypes/Entities/Structures/Walls/girders.yml \
  Resources/Prototypes/Entities/Structures/Walls/grille.yml \
  Resources/Prototypes/Entities/Structures/Walls/walls.yml \
  Resources/Prototypes/Entities/Structures/Walls/railing.yml 2>/dev/null || true

printf '%s\n' '== exact resource candidates =='
fd -HI -i 'lattice|girder|grille' Resources/Textures | sort

printf '%s\n' '== IconSmooth / CardinalFlags source definitions =='
rg -n -C 12 'class\s+IconSmooth|IconSmoothComponent|CardinalFlags|enum\s+IconSmooth' \
  Content.Shared Content.Server Content.Client Robust.Shared 2>/dev/null || true

printf '%s\n' '== lattice specific references, restricted to source and prototypes =='
rg -n -i -C 8 '\blattice\b' \
  Content.Shared Content.Server Content.Client \
  Resources/Prototypes/Entities/Structures Resources/Prototypes/Recipes 2>/dev/null || true

Length of output: 201149


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== CardinalConnectDirs enum and cardinal neighbour order =='
rg -n -A 35 -B 8 'enum\s+CardinalConnectDirs|CalculateNewSpriteCardinal' \
  Content.Client/IconSmoothing/IconSmoothSystem.cs \
  Content.Client/IconSmoothing/IconSmoothComponent.cs 2>/dev/null || true

printf '%s\n' '== lattice tile definition =='
rg -n -i -A 30 -B 12 '(^\s*id:\s*Lattice\b|^\s*tileId:\s*Lattice\b|^\s*name:\s*lattice\b|lattice\.png)' \
  Resources/Prototypes Resources/Tiles 2>/dev/null || true

printf '%s\n' '== lattice image properties =='
file Resources/Textures/Tiles/lattice.png Resources/Textures/Tiles/latticeTrain.png
identify -verbose Resources/Textures/Tiles/lattice.png 2>/dev/null | \
  rg -n 'Geometry|Format|Colorspace|Alpha' || true

printf '%s\n' '== direct tile rendering and tile texture lookup =='
rg -n -C 5 'Tile.*Texture|Texture.*Tile|TileDefinition|TileDef' \
  Content.Client Content.Shared \
  -g '*.cs' 2>/dev/null | head -n 500

Length of output: 18927


@UmbiMax, Lattice — это тайл из Resources/Prototypes/Tiles/plating.yml, а не entity. Поэтому IconSmooth, как у стен, напрямую применить нельзя: он проверяет только соседние anchored entity.

Нужна доработка client tile renderer. Он должен:

  1. Для каждого тайла Lattice вычислять маску соседних тайлов Lattice.
  2. Выбирать один из 16 кадров lattice.png.
  3. Перерисовывать тайл и его четыре соседа после изменения типа тайла.

Не рекомендую делать overlay-entity поверх каждого lattice-тайла. Это создаст много entity, усложнит сохранение карт и синхронизацию при строительстве/разборке покрытия.

Маска в существующем IconSmooth такая:

  • North = 1
  • South = 2
  • East = 4
  • West = 8

То есть порядок кадров в lattice.png должен быть от 0 до 15:

Кадр Соединения
0 нет
1 North
2 South
3 North + South
4 East
5 North + East
6 South + East
7 North + South + East
8 West
9 North + West
10 South + West
11 North + South + West
12 East + West
13 North + East + West
14 South + East + West
15 North + South + East + West

Если файл остаётся одним spritesheet, размести кадры линейно слева направо в этом порядке: 0, 1, 2, …, 15. Размер каждого кадра должен совпадать с текущим тайлом, обычно 32×32.

Для Lattice соединение должно быть только с соседним Lattice. Plating и обычные покрытия не должны выставлять бит. Иначе решётка будет визуально продолжаться под покрытием. Для TrainLattice лучше использовать отдельную маску и не соединять его с обычным Lattice, если их спрайты отличаются.

Логика маски:

var mask = 0;

if (GetTile(north).TypeId == latticeId) mask |= 1;
if (GetTile(south).TypeId == latticeId) mask |= 2;
if (GetTile(east).TypeId == latticeId)  mask |= 4;
if (GetTile(west).TypeId == latticeId)  mask |= 8;

var frame = mask;

Это отдельная client-side правка tile renderer, а не изменение IconSmooth стен.

You are interacting with an AI system.

@UmbiMax

UmbiMax commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai Стены используют 7 спрайтов, а не 15. Разберись как оно работает и составь таблицу того, что требуется оставлять на рисунках на каждом спрайте для решётки.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== IconSmooth declarations and state selection =='
rg -n -C 12 \
  'class\s+IconSmooth(System|Component)|CalculateNewSpriteCardinal|CardinalFlags|CardinalConnectDirs|IconSmooth' \
  Content.Client/IconSmoothing Content.Shared/IconSmoothing Resources/Prototypes/Entities/Structures/Walls \
  2>/dev/null || true

printf '%s\n' '== Candidate wall texture metadata =='
fd -HI 'meta.json' Resources/Textures \
  -x sh -c 'if rg -q "\"(0|1|2|3|4|5|6)\"|\"(single|end|straight|corner|t|cross)\"" "$1"; then printf "%s\n" "$1"; fi' sh {} \
  | head -n 80

printf '%s\n' '== Wall and lattice prototypes =='
rg -n -C 10 \
  'type:\s*IconSmooth|mode:\s*CardinalFlags|base:|id:\s*(Wall|Lattice|TrainLattice)' \
  Resources/Prototypes/Entities/Structures/Walls Resources/Prototypes/Tiles \
  2>/dev/null || true

printf '%s\n' '== Exact candidate resource paths =='
fd -HI -i 'wall|lattice' Resources/Textures | sort | head -n 160

Length of output: 1045


@UmbiMax, проверка не выполнилась: sandbox не смог клонировать репозиторий. Поэтому я не могу достоверно составить таблицу семи состояний.

Повторите запрос после восстановления доступа к репозиторию. Я сверю IconSmoothSystem с meta.json wall RSI и укажу для каждого из 7 кадров решётки, какие стороны должны иметь соединение.

You are interacting with an AI system.

@UmbiMax

UmbiMax commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai Глянь на solid0.png - solid7.png в Resources\Textures\Structures\Walls\solid.rsi
И на то, как работает в коде

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== solid.rsi files =='
fd -HI . Resources/Textures/Structures/Walls/solid.rsi -d 1 | sort

printf '%s\n' '== solid RSI metadata =='
for f in Resources/Textures/Structures/Walls/solid.rsi/meta.json \
         Resources/Textures/Structures/Walls/solid.rsi/solid0.png \
         Resources/Textures/Structures/Walls/solid.rsi/solid1.png \
         Resources/Textures/Structures/Walls/solid.rsi/solid2.png \
         Resources/Textures/Structures/Walls/solid.rsi/solid3.png \
         Resources/Textures/Structures/Walls/solid.rsi/solid4.png \
         Resources/Textures/Structures/Walls/solid.rsi/solid5.png \
         Resources/Textures/Structures/Walls/solid.rsi/solid6.png \
         Resources/Textures/Structures/Walls/solid.rsi/solid7.png; do
  if [ -e "$f" ]; then
    printf '\n-- %s --\n' "$f"
    if [ "${f##*.}" = "json" ]; then
      cat "$f"
    else
      file "$f"
      identify -format 'geometry=%wx%h\n' "$f" 2>/dev/null || true
    fi
  fi
done

printf '%s\n' '== Icon smoothing source outline =='
fd -HI -e cs . Content.Client Content.Shared \
  | xargs -r rg -l 'CalculateNewSpriteCardinal|CardinalFlags|CardinalConnectDirs|IconSmoothComponent' \
  | sort -u

printf '%s\n' '== Cardinal smoothing implementation =='
rg -n -A100 -B20 \
  'CalculateNewSpriteCardinal|CardinalFlags|CardinalConnectDirs|GetState|SetState' \
  Content.Client/IconSmoothing Content.Shared/IconSmoothing 2>/dev/null || true

printf '%s\n' '== wall prototype smoothing configuration =='
rg -n -A25 -B10 \
  'type:\s*IconSmooth|mode:\s*CardinalFlags|base:\s*solid|state:\s*solid[0-7]' \
  Resources/Prototypes/Entities/Structures/Walls 2>/dev/null || true

Length of output: 1773


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo="ArcaneSS14/arcane"
pr=180

head_sha="$(gh api "repos/$repo/pulls/$pr" --jq '.head.sha')"
printf 'PR head: %s\n' "$head_sha"

printf '%s\n' '== target tree entries =='
gh api "repos/$repo/git/trees/$head_sha?recursive=1" --paginate \
  --jq '.tree[] | select(.path == "Resources/Textures/Structures/Walls/solid.rsi/meta.json" or (.path | test("^Resources/Textures/Structures/Walls/solid\\.rsi/solid[0-7]\\.png$")) or (test("IconSmooth.*\\.cs$"))) | [.path, .type, .sha] | `@tsv`'

printf '%s\n' '== solid RSI metadata =='
gh api "repos/$repo/contents/Resources/Textures/Structures/Walls/solid.rsi/meta.json?ref=$head_sha" \
  --jq '.content' | tr -d '\n' | base64 -d

printf '%s\n' '== IconSmooth source files and relevant lines =='
tree_file="$(gh api "repos/$repo/git/trees/$head_sha?recursive=1" --paginate \
  --jq -r '.tree[] | select(.path | test("IconSmooth(System|Component)\\.cs$")) | .path' | head -n 1)"

if [ -n "$tree_file" ]; then
  printf '\n-- %s --\n' "$tree_file"
  gh api "repos/$repo/contents/$tree_file?ref=$head_sha" --jq '.content' \
    | tr -d '\n' | base64 -d \
    | rg -n -A110 -B20 'Cardinal|CalculateNewSprite|state|State'
fi

mkdir -p /tmp/solid-rsi
for i in 0 1 2 3 4 5 6 7; do
  path="Resources/Textures/Structures/Walls/solid.rsi/solid${i}.png"
  gh api "repos/$repo/contents/$path?ref=$head_sha" --jq '.content' \
    | tr -d '\n' | base64 -d > "/tmp/solid-rsi/solid${i}.png"
done

printf '%s\n' '== PNG dimensions and alpha bounding boxes =='
python3 - <<'PY'
from pathlib import Path
import struct, zlib

def png_rgba(path):
    data = path.read_bytes()
    assert data[:8] == b'\x89PNG\r\n\x1a\n'
    pos = 8
    chunks = []
    while pos < len(data):
        n = struct.unpack(">I", data[pos:pos+4])[0]
        typ = data[pos+4:pos+8]
        val = data[pos+8:pos+8+n]
        pos += 12 + n
        chunks.append((typ, val))
    ihdr = next(v for t, v in chunks if t == b'IHDR')
    w, h, bit, color, comp, filt, inter = struct.unpack(">IIBBBBB", ihdr)
    print(f"{path.name}: {w}x{h}, bit={bit}, color={color}, interlace={inter}")
    # Report only the PNG technical properties. Visual topology will be read from the files if a viewer is available.
for path in sorted(Path("/tmp/solid-rsi").glob("solid*.png")):
    png_rgba(path)
PY

Length of output: 2389


@UmbiMax, проверка снова не выполнилась: среда вернула Repository access failed (clone) даже для запроса через GitHub API без клонирования.

Я не буду угадывать соответствие solid0.pngsolid7.png сторонам. Повторите запрос после восстановления доступа к репозиторию. Тогда я сверю:

  • Resources/Textures/Structures/Walls/solid.rsi/meta.json;
  • каждый кадр solid0.pngsolid7.png;
  • преобразование маски направлений в state в IconSmoothSystem.

После этого дам точную таблицу из 8 кадров для lattice.png: какие линии оставить по North, South, East и West.

You are interacting with an AI system.

@UmbiMax

UmbiMax commented Aug 5, 2026

Copy link
Copy Markdown
Collaborator Author

@coderabbitai
В Resources\Prototypes\Entities\Structures\Walls\walls.yml используются спрайты.
Как раз используется solid0.png–solid7.png.

@coderabbitai

coderabbitai Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== Wall prototype configuration =='
rg -n -A35 -B12 \
  '(^\s*id:\s*(Wall|WallSolid)\b|^\s*type:\s*IconSmooth\b|^\s*mode:\s*CardinalFlags\b|^\s*base:\s*solid\b)' \
  Resources/Prototypes/Entities/Structures/Walls/walls.yml 2>/dev/null || true

printf '%s\n' '== solid RSI metadata and files =='
cat Resources/Textures/Structures/Walls/solid.rsi/meta.json 2>/dev/null || true
fd -HI -d 1 -t f . Resources/Textures/Structures/Walls/solid.rsi | sort

printf '%s\n' '== IconSmooth source candidates =='
fd -HI -e cs . Content.Client Content.Shared Robust.Shared 2>/dev/null \
  | xargs -r rg -l 'CalculateNewSpriteCardinal|CardinalFlags|CardinalConnectDirs|IconSmoothComponent' \
  | sort -u

printf '%s\n' '== Cardinal state-selection implementation =='
rg -n -A140 -B25 \
  'CalculateNewSpriteCardinal|CardinalFlags|CardinalConnectDirs|GetState|SetState' \
  Content.Client/IconSmoothing Content.Shared/IconSmoothing 2>/dev/null || true

printf '%s\n' '== PNG dimensions =='
for f in Resources/Textures/Structures/Walls/solid.rsi/solid{0..7}.png; do
  [ -f "$f" ] && { printf '%s: ' "$f"; identify -format '%wx%h\n' "$f" 2>/dev/null || file "$f"; }
done

Length of output: 10706


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '%s\n' '== IconSmoothSystem outline =='
ast-grep outline Content.Client/IconSmoothing/IconSmoothSystem.cs --items all --view expanded

printf '%s\n' '== Cardinal smoothing methods =='
rg -n -A130 -B25 \
  'CalculateNewSpriteCardinal|CardinalFlags|CardinalConnectDirs|SetState|state.*base|base.*state' \
  Content.Client/IconSmoothing/IconSmoothSystem.cs \
  Content.Client/IconSmoothing/IconSmoothComponent.cs \
  Content.Client/IconSmoothing/ClientRandomIconSmoothSystem.cs \
  Content.Shared/IconSmoothing/SmoothEdgeComponent.cs || true

printf '%s\n' '== Direction enum definitions =='
rg -n -A60 -B15 \
  'enum\s+(CardinalConnectDirs|CardinalFlags)|CardinalConnectDirs\s*\{' \
  Content.Client/IconSmoothing Content.Shared/IconSmoothing Robust.Shared 2>/dev/null || true

Length of output: 60681


@UmbiMax, да. Я проверил walls.yml и IconSmoothSystem. Мой предыдущий вывод про 16 кадров был неверен для механизма стен.

WallSolid не использует CardinalFlags. Для него действует режим Corners по умолчанию. Система собирает стену из четырёх угловых слоёв. Каждый слой использует solid0solid7 и поворачивает спрайт. Поэтому solid0.pngsolid7.png — это не восемь форм всей стены.

Базовый угол — юго-восточный (SE). Для каждого solidN.png оставляй заполнение в этом углу по таблице:

Файл Сосед к North Сосед к East Сосед к NorthEast Что рисует SE-угол
solid0.png нет нет нет Пустой угол
solid1.png да нет нет Заполнение вдоль North-стороны угла
solid2.png нет нет да Диагональное заполнение угла
solid3.png да нет да North-сторона и диагональ
solid4.png нет да нет Заполнение вдоль East-стороны угла
solid5.png да да нет North- и East-стороны
solid6.png нет да да East-сторона и диагональ
solid7.png да да да Полностью заполненный угол

Код задаёт это в Content.Client/IconSmoothing/IconSmoothSystem.cs:

  • North добавляет часть к NE и NW;
  • East добавляет часть к NE и SE;
  • NorthEast добавляет диагональную часть к NE;
  • затем одна и та же форма угла поворачивается для остальных трёх углов.

Для решётки диагональные соседи не нужны. Поэтому схема стен из solid0solid7 не подходит напрямую: она рассчитана на заполнение площади стены и использует четыре слоя.

Для решётки нужны шесть форм соединений. Повороты должны делать движок или tile renderer:

Базовый кадр Линии на рисунке Повороты покрывают
lattice0 Нет линий Нет соседей
lattice1 От центра к South Один сосед
lattice2 North — South Два противоположных соседа
lattice3 South — East Два соседних соседа
lattice4 North — South — East Три соседа
lattice5 North — South — East — West Четыре соседа

Если нужен единый PNG без поворота в коде, потребуется 16 кадров с маской North=1, South=2, East=4, West=8. Если tile renderer умеет поворачивать state, достаточно этих шести кадров.

Текущий IconSmooth нельзя применить к покрытию без отдельной реализации для tile adjacency. Он ищет соседние anchored entity, а не соседние tile.

You are interacting with an AI system.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant