Skip to content

port cyrillic crayon sprites#8

Open
cryals wants to merge 1 commit intomasterfrom
locale-sprite
Open

port cyrillic crayon sprites#8
cryals wants to merge 1 commit intomasterfrom
locale-sprite

Conversation

@cryals
Copy link
Member

@cryals cryals commented Mar 17, 2026

http://github.com/space-syndicate/space-station-14/commit/fdf42dfcb2dbe94a8022e91de5d22fda3c505cef

image

Changelog

🆑 AL-S

  • add: Порт символов в мелки

Summary by CodeRabbit

  • New Features
    • Added Cyrillic letter decals available as crayons. Includes 21 different Cyrillic characters for expanded in-game decoration and customization options.

@github-actions
Copy link
Contributor

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

Resources/Textures/_Corvax/Effects/crayondecals.rsi

State Old New Status
cyr_b Added
cyr_c Added
cyr_ch Added
cyr_d Added
cyr_eh Added
cyr_f Added
cyr_g Added
cyr_hard_sign Added
cyr_i Added
cyr_l Added
cyr_p Added
cyr_sh Added
cyr_shh Added
cyr_soft_sign Added
cyr_y Added
cyr_ya Added
cyr_yu Added
cyr_z Added
cyr_zh Added

@coderabbitai
Copy link

coderabbitai bot commented Mar 17, 2026

📝 Walkthrough

Walkthrough

Two new resource files are added to support Cyrillic letter decals for the crayons system. The YAML file defines 21+ decal prototypes mapping Cyrillic letters to sprite states, while the JSON metadata file specifies the texture atlas configuration (32×32 sprites, CC0-1.0 license) containing the corresponding glyph imagery.

Changes

Cohort / File(s) Summary
Cyrillic Crayon Decals
Resources/Prototypes/_Corvax/Decals/crayons.yml, Resources/Textures/_Corvax/Effects/crayondecals.rsi/meta.json
Adds decal prototype definitions and texture atlas metadata for 21+ Cyrillic letter states (cyr_b, cyr_g, cyr_d, cyr_zh, etc.) with 32×32 sprites under CC0-1.0 license.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~8 minutes

Poem

🐰 Cyrillic whiskers twitch with glee,
Each letter drawn in crayon spree,
From cyr_b to cyr_zh we go,
Sprites aligned in perfect row!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Title check ✅ Passed The title 'port cyrillic crayon sprites' directly and clearly summarizes the main change—adding Cyrillic letter decals/sprites for crayon functionality.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
  • 📝 Generate docstrings (stacked PR)
  • 📝 Generate docstrings (commit on current branch)
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch locale-sprite
📝 Coding Plan
  • Generate coding plan for human review comments

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 and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@Resources/Prototypes/_Corvax/Decals/crayons.yml`:
- Around line 2-133: The Cyrillic decal entries (ids like cyr_b, cyr_g, cyr_d,
cyr_zh, cyr_z, cyr_i, cyr_l, cyr_p, cyr_f, cyr_c, cyr_ch, cyr_sh, cyr_shh,
cyr_hard_sign, cyr_y, cyr_soft_sign, cyr_eh, cyr_yu, cyr_ya) are missing base
crayon behavior fields; add the same default fields used by existing crayon
decals—defaultCleanable, defaultCustomColor, and defaultSnap—with the same
values as the other crayon entries so these decals inherit correct colorization,
cleanup, and snap behavior (update each decal block to include defaultCleanable:
true/false, defaultCustomColor: true/false, defaultSnap: true/false matching the
base crayon decal pattern).

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 71bd342a-9af0-406f-902d-79c2f7464b5f

📥 Commits

Reviewing files that changed from the base of the PR and between 61021c8 and b7087c8.

⛔ Files ignored due to path filters (19)
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_b.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_c.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_ch.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_d.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_eh.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_f.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_g.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_hard_sign.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_i.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_l.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_p.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_sh.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_shh.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_soft_sign.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_y.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_ya.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_yu.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_z.png is excluded by !**/*.png
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/cyr_zh.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • Resources/Prototypes/_Corvax/Decals/crayons.yml
  • Resources/Textures/_Corvax/Effects/crayondecals.rsi/meta.json

Comment on lines +2 to +133
- type: decal # Б
id: cyr_b
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_b

- type: decal # Г
id: cyr_g
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_g

- type: decal # Д
id: cyr_d
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_d

- type: decal # Ж
id: cyr_zh
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_zh

- type: decal # З
id: cyr_z
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_z

- type: decal # И
id: cyr_i
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_i

- type: decal # Л
id: cyr_l
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_l

- type: decal # П
id: cyr_p
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_p

- type: decal # Ф
id: cyr_f
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_f

- type: decal # Ц
id: cyr_c
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_c

- type: decal # Ч
id: cyr_ch
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_ch

- type: decal # Ш
id: cyr_sh
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_sh

- type: decal # Щ
id: cyr_shh
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_shh

- type: decal # Ъ
id: cyr_hard_sign
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_hard_sign

- type: decal # Ы
id: cyr_y
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_y

- type: decal # Ь
id: cyr_soft_sign
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_soft_sign

- type: decal # Э
id: cyr_eh
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_eh

- type: decal # Ю
id: cyr_yu
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_yu

- type: decal # Я
id: cyr_ya
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_ya
Copy link

@coderabbitai coderabbitai bot Mar 17, 2026

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Match base crayon behavior fields on all new Cyrillic decals.

These entries omit defaultCleanable, defaultCustomColor, and defaultSnap, while existing crayon decals define them. That can cause behavior drift (notably colorization/cleanup/snap handling) for Cyrillic decals.

💡 Suggested patch pattern (apply to each Cyrillic decal entry)
 - type: decal # Б
   id: cyr_b
   tags: ["crayon", "crayon-2-alphanum"]
+  defaultCleanable: true
+  defaultCustomColor: true
+  defaultSnap: false
   sprite:
     sprite: _Corvax/Effects/crayondecals.rsi
     state: cyr_b
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
- type: decal # Б
id: cyr_b
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_b
- type: decal # Г
id: cyr_g
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_g
- type: decal # Д
id: cyr_d
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_d
- type: decal # Ж
id: cyr_zh
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_zh
- type: decal # З
id: cyr_z
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_z
- type: decal # И
id: cyr_i
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_i
- type: decal # Л
id: cyr_l
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_l
- type: decal # П
id: cyr_p
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_p
- type: decal # Ф
id: cyr_f
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_f
- type: decal # Ц
id: cyr_c
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_c
- type: decal # Ч
id: cyr_ch
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_ch
- type: decal # Ш
id: cyr_sh
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_sh
- type: decal # Щ
id: cyr_shh
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_shh
- type: decal # Ъ
id: cyr_hard_sign
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_hard_sign
- type: decal # Ы
id: cyr_y
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_y
- type: decal # Ь
id: cyr_soft_sign
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_soft_sign
- type: decal # Э
id: cyr_eh
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_eh
- type: decal # Ю
id: cyr_yu
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_yu
- type: decal # Я
id: cyr_ya
tags: ["crayon", "crayon-2-alphanum"]
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_ya
- type: decal # Б
id: cyr_b
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_b
- type: decal # Г
id: cyr_g
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_g
- type: decal # Д
id: cyr_d
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_d
- type: decal # Ж
id: cyr_zh
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_zh
- type: decal # З
id: cyr_z
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_z
- type: decal # И
id: cyr_i
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_i
- type: decal # Л
id: cyr_l
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_l
- type: decal # П
id: cyr_p
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_p
- type: decal # Ф
id: cyr_f
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_f
- type: decal # Ц
id: cyr_c
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_c
- type: decal # Ч
id: cyr_ch
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_ch
- type: decal # Ш
id: cyr_sh
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_sh
- type: decal # Щ
id: cyr_shh
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_shh
- type: decal # Ъ
id: cyr_hard_sign
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_hard_sign
- type: decal # Ы
id: cyr_y
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_y
- type: decal # Ь
id: cyr_soft_sign
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_soft_sign
- type: decal # Э
id: cyr_eh
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_eh
- type: decal # Ю
id: cyr_yu
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_yu
- type: decal # Я
id: cyr_ya
tags: ["crayon", "crayon-2-alphanum"]
defaultCleanable: true
defaultCustomColor: true
defaultSnap: false
sprite:
sprite: _Corvax/Effects/crayondecals.rsi
state: cyr_ya
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@Resources/Prototypes/_Corvax/Decals/crayons.yml` around lines 2 - 133, The
Cyrillic decal entries (ids like cyr_b, cyr_g, cyr_d, cyr_zh, cyr_z, cyr_i,
cyr_l, cyr_p, cyr_f, cyr_c, cyr_ch, cyr_sh, cyr_shh, cyr_hard_sign, cyr_y,
cyr_soft_sign, cyr_eh, cyr_yu, cyr_ya) are missing base crayon behavior fields;
add the same default fields used by existing crayon decals—defaultCleanable,
defaultCustomColor, and defaultSnap—with the same values as the other crayon
entries so these decals inherit correct colorization, cleanup, and snap behavior
(update each decal block to include defaultCleanable: true/false,
defaultCustomColor: true/false, defaultSnap: true/false matching the base crayon
decal pattern).

Copy link
Member Author

Choose a reason for hiding this comment

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

хуйню не неси, это порт блять

Copy link

Choose a reason for hiding this comment

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

The PR description image shows a dark-themed character picker dialog titled "Мелок" (Chalk) displaying a grid of characters including Cyrillic letters, Latin letters, and digits — confirming the visual result of these crayon decal additions.

Let me verify the upstream commit to see whether the original source also omits those fields.

@cryals, понял, спасибо за пояснение — раз это прямой порт из апстрима (fdf42df), добавлять поля, которых нет в оригинале, не нужно. Снимаю замечание.


✏️ Learnings added
Learnt from: cryals
Repo: ss14-art/open-space PR: 8
File: Resources/Prototypes/_Corvax/Decals/crayons.yml:2-133
Timestamp: 2026-03-17T09:20:40.880Z
Learning: In the ss14-art/open-space repository, PRs that port content from the upstream space-syndicate/space-station-14 repository should not have extra fields or modifications added that are not present in the upstream source. Faithful ports should be left as-is to match the original.

Note: Learnings are effective only in the context of similar code segments. To apply general coding guidelines, please configure review instructions. You can manage existing learnings in the app.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant