Tạo skin khối mới: 120 × 120, bảy ảnh, một dòng đăng ký
Kết quả kiểm tra 132 file skin trong game/Content/res và code đọc chúng. Hiện chỉ icon khối được nối vào game. Phần còn lại của cấu hình skin gốc chưa có code dùng.
120×120kích thước mọi icon khối
132 / 132file đúng 120×120 (63 + 68 + 1)
7ảnh mỗi skin (icon1..icon7)
280skin trong TbSkinConfig
1. Icon khối: thành phần duy nhất đang chạy
120 px120 px
Mục
Yêu cầu
Kích thước
120×120 px, vuông
Định dạng
PNG RGBA 8-bit, có kênh alpha
Vùng vẽ
Phủ kín khung. Bbox alpha của cả 69 file mẫu đo được là (0,0,120,120), không có lề trong suốt
Hình dạng
Ô vuông bo góc. Góc ngoài trong suốt (alpha 0)
Màu
Tô sẵn trong ảnh. Game vẽ nguyên bản, không tint
Hiển thị
kCell = 960 / 8 = 120, nên ảnh hiện 1:1 trên lưới 8×8
Ảnh thật trong game, hiển thị đúng 120 px trên nền ô caro (viền cam là khung 120×120)
<k> là chữ số thứ blockId-1 trong chuỗi blocks của skin, ví dụ "1234561".
<suffix> là số của skin, ví dụ 1301.
blockId ngoài 1..7 được kẹp về 1..7 (std::clamp trong skinIconPath).
Cho phép dùng chung ảnh. Skin 4013 có blocks = "1111111", tức cả 7 loại khối dùng cùng một ảnh cube_1_....
Nguồn quy ước: SkinMgr.cs:575 (icon không có trong family thì thêm hậu tố _differentMaterials) và BoardView.cpp:224.
3. Đăng ký skin để game dùng được
Thêm dòng vào bảng kPoolIcons[] trong game/Source/screens/board/BoardView.cpp (dòng 205-211):
{4020, 1321, "1234561"}, // {id, suffix, blocks}
Muốn skin được bốc ngẫu nhiên khi thanh x/25 đầy, thêm id vào kSkinPool trong game/core/src/endless_game.cpp:27.
Skin không có trong kPoolIcons sẽ dùng BlockStyle/Default/ic_block.png.
Chỉ muốn đổi giao diện khối mặc định: ghi đè ic_block.png (120×120), không cần sửa code.
Preview skin trên thanh tiến trình đang gắn cứng skin_shared/skins/cube_3_woodskin_004.png (BoardView.cpp:506). Skin mới sẽ không đổi preview này.
Tôi chưa đọc SkinResourceFamilyMap.cs, nên chưa kiểm tra việc skin ngoài pool có phải đăng ký thêm family hay không.
4. Bàn cờ và nền (ảnh dùng chung, không đổi theo skin)
Ảnh (trong Art/)
Kích thước
Ghi chú
LoadCore/Sprite/SkinStyle/qipannew.png
76×1012
Khung bàn cờ, vẽ ở kFrameSize = 1002
LoadCore/Sprite/SkinStyle/QiPanxin.png
118×118
Ô nền của lưới
LoadCore/Sprite/SkinStyle/QiPanxingray.png
118×118
Biến thể xám
LoadCore/Sprite/SkinStyle/img_bock_white.png
115×116
LoadCore/Sprite/SkinStyle/img_bock_white_1.png
954×114
LoadCore/Sprite/SkinStyle/img_lx_bg01.png
384×1024
Nền màn Travel
LoadResShared/Sprite/SkinStyle/QiPanbg_1.png
768×2048
Nền
LoadResShared/Sprite/SkinStyle/img_muwen.png
768×2048
Vân gỗ
BlockStyle/Default/base_ic_collection_block.png
120×120
Nền ô gem Travel (id ≥ 100). Gem vẽ đè ở 0.7 × kCell, tối đa khoảng 84 px
5. Trường cấu hình skin chưa nối vào code port
Mỗi skin trong data_src/config/TbSkinConfig.json có hàng chục trường. Tìm trong game/Source không thấy chỗ nào đọc các trường dưới đây. Kích thước ảnh của nhóm này tôi chưa đo.