🔔 Bladewake GDD
📄 Doc 30 · Art · VFX · Âm thanh

30 — Art Direction (bản đầy đủ 1.0)

luật hình ảnh khoá cho mọi sprite/tile/portrait/key art của Bladewake: camera & tỉ lệ pixel, sở hữu màu (INV-01 tổng quát), viền/đổ bóng/ánh sáng, mẫu Actor spec, mẫu tile & prop, key art Steam, pipeline pixelfx → Unity.

Cập nhật: 2026-11-07
10
mục ##
31
mục ###
23
bảng
8830
từ

1Giới thiệu & bản đồ tài liệu

📌
Mục đích: luật hình ảnh khoá cho mọi sprite/tile/portrait/key art của Bladewake: camera & tỉ lệ pixel, sở hữu màu (INV-01 tổng quát), viền/đổ bóng/ánh sáng, mẫu Actor spec, mẫu tile & prop, key art Steam, pipeline pixelfx → Unity. Phụ thuộc: 00-Design-Bible.md + data/_bible.json (canon: INV-01..INV-18, heroes[].signature_hex, biomes[], enemies[], §7.7 rig, §10.3–10.4) · hub .claude/docs/ArtStyle.md (§1–§7, không sửa từ đây) · Tools/pixelfx nhánh g008-demo (docs/AUTHORING.md, skills/pixelfx/SKILL.md) · Assets/_Project/Others/Editor/PixelArtImportRules.cs · demo GDD/04-Enemies.md §4, GDD/07-Game-Feel.md §6–§8. Được dùng bởi: 31-VFX-Bible.md · doc hero / quái / boss / biome / hub / UI · agent sinh sprite (pixelfx), agent art-style-reviewer, dev Unity (import, sorting, camera).
Vòng sở hữu màu: slot hue 12 hero và dải tell dành riêngVòng trong: slot hero (tâm ±10°). Vòng ngoài: dải tell và dải cấm (doc 30 §3.1).Tell vàng (Y): 32–62°Tell vàng (Y) 32–62°Tell tím (P): 260–290°Tell tím (P) 260–290°Cấm đỏ thẫm (địch, môi trường): 340–10°Cấm đỏ thẫm (địch, môi trường) 340–10°H06 Ruvan · tâm 14° ±10° · #f2501fH0614°H08 Dov · tâm 82° ±10° · #7bb21bH0882°H11 Wenna · tâm 104° ±10° · #8bdb6eH11104°H07 Veyra · tâm 126° ±10° · #2db23aH07126°H04 Sậu · tâm 148° ±10° · #30f089H04148°H10 Ingra · tâm 170° ±10° · #1ab89eH10170°H12 Ambrin · tâm 192° ±10° · #2ec0e8H12192°H03 Halka · tâm 214° ±10° · #3680e0H03214°H05 Oska · tâm 236° ±10° · #242db2H05236°H09 Kessa · tâm 325° ±10° · #b20068H09325°H01 Varek · tâm 354° ±10° · #e0283aH01354°H02 Bodan #e4dcc8 (vô sắc)H02 Bodanvô sắcSlot hero (tâm ±10°)H01 Varek 354°H02 Bodan vô sắcH03 Halka 214°H04 Sậu 148°H05 Oska 236°H06 Ruvan 14°H07 Veyra 126°H08 Dov 82°H09 Kessa 325°H10 Ingra 170°H11 Wenna 104°H12 Ambrin 192°Dải dành riêng / cấmTell vàng (Y) 32–62°Tell tím (P) 260–290°Cấm đỏ thẫm (địch, môi trường) 340–10°
Nguồn: data/_bible.json (heroes.signature_hex, hue) · doc 30 §3.1 (dải dành riêng).
Luật sở hữu màu đầy đủ (doc 30 §3.1)
LuậtGiá trịÁp cho
Dải tell vànghue 32–62°, S ≥ 45% → CHỈ #ffd84a tell Y (glint, viền nháy, đạn Y)mọi sprite, tile, VFX world
Dải tell tímhue 260–290°, S ≥ 45% → CHỈ #b14cff tell P (vùng sàn, hào quang, !)như trên
Ngoại lệ duy nhấtglint vàng kim Dòng Chảy (H01) / Relic ≤ 2 px/frame, không trên vũ khí địchVFX hero
Slot herotâm ±10°, skin ±4° (biến thể bằng S/V)lưỡi vũ khí, viền FX, vòng chân, rim, afterimage, ult, triệu hồi, đạn phản
Cấm đỏ thẫmhue 340–10°, S > 30% cấm trên thân địch + môi trườngđịch, tile, prop (trừ H01 FX)
Thân địchS ≤ 40%; điểm nhấn S > 40% chỉ khi ≤ 10% pixel spritemọi EN/EL/MB/BS
Môi trườngS ≤ 40% mọi pixel (gồm kim loại nung B3; đèn đo trên pixel sau blend, màu tint cột Đèn §3.3 không phải token palette) → tự động ngoài 2 dải telltile, prop, decal, vũng sáng
Tương phảnV thân nhân vật ≥ 1.35 × V sàn base biome; sàn tối dần ra mép màn (chỉ sàn)hero, địch, NPC
Chấm xám vùng đọng#e8e4f0 viền chấm 2 px + fill chấm thưa 15% = CHỈ cho N (INV-02); tile/decal không được dùng mẫu chấm vòngVFX địch, hazard
Gạch chéodành cho chế độ mù màu tím P; cấm ở mọi tile/decal/FX kháctoàn game
Screen-spaceHUD + số sát thương không áp slot (INV-01g); số chí mạng ngà + "!" (không vàng tell); thanh Thế boss bạcUI
Ramp FX 12 hero (r0 → r7)Ramp FX 12 hero (r0 → r7)H01 VarekH01 Varek r0r0H01 Varek r1r1H01 Varek r2r2H01 Varek r3r3H01 Varek r4r4H01 Varek r5r5H01 Varek r6r6H01 Varek r7r7H02 BodanH02 Bodan r0r0H02 Bodan r1r1H02 Bodan r2r2H02 Bodan r3r3H02 Bodan r4r4H02 Bodan r5r5H02 Bodan r6r6H02 Bodan r7r7H03 HalkaH03 Halka r0r0H03 Halka r1r1H03 Halka r2r2H03 Halka r3r3H03 Halka r4r4H03 Halka r5r5H03 Halka r6r6H03 Halka r7r7H04 SậuH04 Sậu r0r0H04 Sậu r1r1H04 Sậu r2r2H04 Sậu r3r3H04 Sậu r4r4H04 Sậu r5r5H04 Sậu r6r6H04 Sậu r7r7H05 OskaH05 Oska r0r0H05 Oska r1r1H05 Oska r2r2H05 Oska r3r3H05 Oska r4r4H05 Oska r5r5H05 Oska r6r6H05 Oska r7r7H06 RuvanH06 Ruvan r0r0H06 Ruvan r1r1H06 Ruvan r2r2H06 Ruvan r3r3H06 Ruvan r4r4H06 Ruvan r5r5H06 Ruvan r6r6H06 Ruvan r7r7H07 VeyraH07 Veyra r0r0H07 Veyra r1r1H07 Veyra r2r2H07 Veyra r3r3H07 Veyra r4r4H07 Veyra r5r5H07 Veyra r6r6H07 Veyra r7r7H08 DovH08 Dov r0r0H08 Dov r1r1H08 Dov r2r2H08 Dov r3r3H08 Dov r4r4H08 Dov r5r5H08 Dov r6r6H08 Dov r7r7H09 KessaH09 Kessa r0r0H09 Kessa r1r1H09 Kessa r2r2H09 Kessa r3r3H09 Kessa r4r4H09 Kessa r5r5H09 Kessa r6r6H09 Kessa r7r7H10 IngraH10 Ingra r0r0H10 Ingra r1r1H10 Ingra r2r2H10 Ingra r3r3H10 Ingra r4r4H10 Ingra r5r5H10 Ingra r6r6H10 Ingra r7r7H11 WennaH11 Wenna r0r0H11 Wenna r1r1H11 Wenna r2r2H11 Wenna r3r3H11 Wenna r4r4H11 Wenna r5r5H11 Wenna r6r6H11 Wenna r7r7H12 AmbrinH12 Ambrin r0r0H12 Ambrin r1r1H12 Ambrin r2r2H12 Ambrin r3r3H12 Ambrin r4r4H12 Ambrin r5r5H12 Ambrin r6r6H12 Ambrin r7r7
Nguồn: doc 30 §3.2 (r4 = signature_hex).
Độ dài từng mục (nghìn ký tự)Độ dài từng mục (nghìn ký tự)1. Trụ cột hình ảnh1. Trụ cột hình ảnh: 1k1k2. Camera & tỉ lệ pixel2. Camera & tỉ lệ pixel: 2.9k2.9k3. Sở hữu màu (INV-01 tổng quát)3. Sở hữu màu (INV-01 tổng quát): 8.5k8.5k4. Viền, đổ bóng, ánh sáng4. Viền, đổ bóng, ánh sáng: 1.8k1.8k5. Actor spec (mẫu cuối) & luật theo l…5. Actor spec (mẫu cuối) & luật theo loại: 13.4k13.4k6. Môi trường — tile & prop6. Môi trường — tile & prop: 3.2k3.2k7. Key art & capsule Steam7. Key art & capsule Steam: 1.5k1.5k8. Pipeline sản xuất với pixelfx8. Pipeline sản xuất với pixelfx: 4.5k4.5k9. Quy tắc cho dev/AI9. Quy tắc cho dev/AI: 1.5k1.5k10. Quyết định đã chốt10. Quyết định đã chốt: 3.2k3.2k
Bấm tên mục để nhảy tới mục đó.
Mục lục chi tiết (## và ###)
  1. 1. Trụ cột hình ảnh
  2. 2. Camera & tỉ lệ pixel
  3. 2.1 Phép chiếu (khoá, = pixelfx VIEW.tilt 0.5)
  4. 2.2 Độ phân giải & zoom
  5. 2.3 Cỡ chuẩn (art px, đứng hướng se/sw)
  6. 2.4 Hướng
  7. 3. Sở hữu màu (INV-01 tổng quát)
  8. 3.1 Dải dành riêng & luật chung (áp cho mọi pixel world-space)
  9. 3.2 Ramp FX 12 hero (slot INV-01b)
  10. 3.3 Palette môi trường theo biome
  11. 3.4 Ramp thân địch theo biome (INV-01d)
  12. 3.5 Alt tro-xương & LUT palette (INV-01d, 0 sheet thêm)
  13. 3.6 Token hệ thống (dùng chung mọi biome)
  14. 3.7 Cổng kiểm màu tự động
  15. 4. Viền, đổ bóng, ánh sáng
  16. 5. Actor spec (mẫu cuối) & luật theo loại
  17. 5.1 Mẫu Actor spec
  18. 5.2 Hero — bộ clip (khung 30 fps; chân tay bước 12 fps, H01 30 fps)
  19. 5.3 Hero — socket, portrait, tư thế chọn
  20. 5.4 Khoá art 12 hero
  21. 5.5 Địch theo hạng (hợp đồng clip = demo 04 §4.1, mở rộng)
  22. 5.6 Boss — đa phần & dạng pha
  23. 5.6b Khoá art mini-boss (hạng L, §2.3)
  24. 5.7 NPC hub
  25. 5.8 Ví dụ điền mẫu — H03 Halka (rút gọn)
  26. 6. Môi trường — tile & prop
  27. 6.1 Lưới & loại tile (Unity Tilemap, PPU 16)
  28. 6.2 Chiều cao, che khuất, sort
  29. 6.3 Decal
  30. 6.4 Mẫu Tile/Prop spec
  31. 7. Key art & capsule Steam
  32. 7.1 Hướng
  33. 7.2 Kích thước (gốc → phóng)
  34. 8. Pipeline sản xuất với pixelfx
  35. 8.1 Các bước (1 actor; VFX theo checklist doc 31 §12)
  36. 8.2 Đặt tên
  37. 8.3 Nhập Unity (khoá, PixelArtImportRules.cs)
  38. 8.4 Ngân sách bộ nhớ (≤ 21 trang 2048² thường trú, Bible §10.3)
  39. 8.5 Cổng duyệt (thứ tự, dừng ở lỗi đầu tiên)
  40. 9. Quy tắc cho dev/AI
  41. 10. Quyết định đã chốt

21. Trụ cột hình ảnh

IDTrụ cộtLuật đo đượcKiểm
VP1Pixel thật, 1 cỡ pixel1 art px = 1 px pixelfx = 1/16 unit Unity; scale nguyên; không AA, không blur, không xoay spriteảnh chụp ×1: 0 pixel lai màu ngoài ramp
VP23/4 top-down đúng phép chiếusàn nén 0.5 theo chiều sâu, vật đứng cao đủ; mọi vòng sàn = elip 2:1overlay elip trên ảnh chụp
VP3Hình khối thắng màuFX hero = lõi #fff6f0 + viền slot, ĐẶC; FX địch = lõi tối/lạnh + viền sáng, RỖNG (INV-01c)test mù màu (lọc xám) vẫn phân biệt được
VP4Sở hữu màudải tell vàng/tím dành riêng; 12 slot hue hero; địch lạnh S ≤ 40% (INV-01a/b/d)script màu §3.7 = 0 lỗi
VP5Đọc được trong 250 quáithân nhân vật sáng hơn sàn ≥ 35% (V); hero có vòng chân + rim + x-ray 55%test 5 s (P4) đúng với 12 hero
VP6Diễn bằng thânmọi đòn có windup ngược hướng → nhả → khựng → hồi (act pixelfx); pose windup ≠ pose đi (INV-03)tools/act.mjs duyệt từng bước 12 fps
VP7Tang lễ, không máu mechủ đề tro/chuông/khăn tang; không máu đỏ, không nội tạng; xác tan bằng dither troreviewer từ chối máu đỏ / gore

32. Camera & tỉ lệ pixel

2.1 Phép chiếu (khoá, = pixelfx VIEW.tilt 0.5)

  • Toạ độ gameplay trên sàn: (fx, fz) px, fz dương = xa camera (lên trên màn). Độ cao h px, dương = lên.
  • Màn (art px, gốc dưới-trái kiểu Unity): sx = fx · sy = 0.5·fz + h. Unity: pos = (sx/16, sy/16, 0).
  • Quy ước pixelfx (gốc trên-trái): screenX = x · screenY = z·0.5 + y (y âm = lên). Hai quy ước chỉ đổi dấu trục Y; số px giống nhau.
  • Hệ quả bắt buộc: vòng sàn bán kính r = elip rộng 2r × cao r; tốc 130 px/s đi Bắc/Nam = 65 px/s trên màn (đúng, không bù).
  • Sắp xếp (Y-sort): theo sy của pivot chân (h không tính); Unity TransparencySortAxis (0,1,0), sorting mode Custom Axis.

2.2 Độ phân giải & zoom

Công thức: zoom = số nguyên lớn nhất z thoả H/z ≥ 266 và W/z ≥ 426 · view = (min(640, ceil(W/z)), min(360, ceil(H/z))) art px · phần thừa = viền void #15131d. Không bao giờ zoom lẻ. Vùng an toàn gameplay = 427×267 giữa màn (Bible §10.4): spawn công bằng, tell, HUD neo theo vùng này.

MànzoomView (art px)Ghi chú
1920×10804480×270chuẩn thiết kế; mọi mockup dựng ở 480×270
1280×800 (Deck)3427×2671281×801, cắt 1 px (Bible)
1280×7202640×360thấy rộng hơn; luật công bằng vẫn theo 427×267
1920×12004480×300
2560×14405512×288
3440×14405640×288trần ngang 640, viền 2×80 px màn
3840×21608480×270
  • Unity: PixelPerfectCamera assetsPPU 16, refResolution = view của công thức (script đặt lúc đổi độ phân giải), upscaleRT bật, orthographicSize = viewH / 32. Vị trí camera làm tròn tới 1/16 unit mỗi frame (demo chưa snap → bắt buộc ở 1.0).
  • Camera chiến đấu: không zoom, không xoay; rung = Bible/07 (7 px × trauma^1.5, cú đẩy ≤ 4 px), offset rung cũng làm tròn tới 1 art px.

2.3 Cỡ chuẩn (art px, đứng hướng se/sw)

HạngChiều cao đứngThân (rộng×cao)Khung body tối đa / clipBóng sàn rx×ryVí dụ
Hero3624×38 (stock actor)96×9611×5H01 Varek (demo)
Quái S26–40 (≤ 48)≤ 32×4064×649×4EN_B1_01 32, EN_B1_02 26
Tinh Anh M52–60 (≤ 64)≤ 48×60112×9616×8EL_B1_01 56
Mini-boss L64–80≤ 80×80160×12824×12MB_B4_1 dài 96
Boss XL72–96 (≤ 96, Bible §7.7)≤ 128×96 mỗi phần192×160 mỗi phần32×16BS_B1 72
NPC hub34–44≤ 28×4464×6410×5NPC_RAM 44
Triệu hồi hero20–36≤ 24×3664×648×4phường kèn H12
  • Bóng sàn: rx = round(0.45 × rộng thân), ry = round(rx / 2), màu shadow #0a0810 α 0.45, lớp FXBot. Khi bay độ cao h: rx_h = rx × max(0.5, 1 − h/64), α giảm 0.45 → 0.25 tuyến tính tới h = 64.
  • Hero cao nhất roster ≤ 44 px (H02 Bodan 42, H05 Oska 32 thấp đậm) để luôn nhỏ hơn Tinh Anh M (≥ 52): đọc hạng bằng cỡ.
  • Vũ khí dài được vượt khung thân: H03 giáo 1.8 × thân ≈ 65 px; tổng khung clip vẫn ≤ 96×96 (vfx tách sheet riêng).

2.4 Hướng

  • 8 hướng e se s sw w nw n ne; xuất 8, đóng gói giữ e se s n ne, runtime lật gương w sw nw (Tools/bw-pack.mjs KEEP_DIRS).
  • Mặc định: hero se, địch sw, NPC s. Đứng yên trong hub: NPC xuất s se (lật sw).
  • Cấm xoay ảnh để ngắm: đòn ngắm dùng sheet hướng gần nhất (bước 45°); đạn bay theo góc tự do = sprite đối xứng tròn hoặc 8 hướng chọn gần nhất.

43. Sở hữu màu (INV-01 tổng quát)

3.1 Dải dành riêng & luật chung (áp cho mọi pixel world-space)

LuậtGiá trịÁp cho
Dải tell vànghue 32–62°, S ≥ 45% → CHỈ #ffd84a tell Y (glint, viền nháy, đạn Y)mọi sprite, tile, VFX world
Dải tell tímhue 260–290°, S ≥ 45% → CHỈ #b14cff tell P (vùng sàn, hào quang, !)như trên
Ngoại lệ duy nhấtglint vàng kim Dòng Chảy (H01) / Relic ≤ 2 px/frame, không trên vũ khí địchVFX hero
Slot herotâm ±10°, skin ±4° (biến thể bằng S/V)lưỡi vũ khí, viền FX, vòng chân, rim, afterimage, ult, triệu hồi, đạn phản
Cấm đỏ thẫmhue 340–10°, S > 30% cấm trên thân địch + môi trườngđịch, tile, prop (trừ H01 FX)
Thân địchS ≤ 40%; điểm nhấn S > 40% chỉ khi ≤ 10% pixel spritemọi EN/EL/MB/BS
Môi trườngS ≤ 40% mọi pixel (gồm kim loại nung B3; đèn đo trên pixel sau blend, màu tint cột Đèn §3.3 không phải token palette) → tự động ngoài 2 dải telltile, prop, decal, vũng sáng
Tương phảnV thân nhân vật ≥ 1.35 × V sàn base biome; sàn tối dần ra mép màn (chỉ sàn)hero, địch, NPC
Chấm xám vùng đọng#e8e4f0 viền chấm 2 px + fill chấm thưa 15% = CHỈ cho N (INV-02); tile/decal không được dùng mẫu chấm vòngVFX địch, hazard
Gạch chéodành cho chế độ mù màu tím P; cấm ở mọi tile/decal/FX kháctoàn game
Screen-spaceHUD + số sát thương không áp slot (INV-01g); số chí mạng ngà + "!" (không vàng tell); thanh Thế boss bạcUI

3.2 Ramp FX 12 hero (slot INV-01b)

8 bậc tối → sáng (r0..r7) + lõi #fff6f0 (r8, INV-01c) + chớp #ffffff (≤ 2 frame). Bậc tối lệch về lạnh, bậc sáng lệch về ấm, luôn trong ±10° quanh tâm slot và ngoài 24–70° / 252–298°. r4 = signature_hex. Ngoại lệ H01: giữ ramp canon demo _varek.js CRIMSON (r0 330°, r1 341°, r5 5°, r6 22° lệch > 10°; xem §10). Ramp này là --opts palette khi xuất mọi VFX hero và là hàng LUT của hero trong PAL_HERO (§3.6).

HeroTâm°r0r1r2r3r4 (slot)r5r6r7Ghi chú
H01 Varek354#1a0610#3d0a1a#6e1024#a8162e#e0283a#ff4836#ff9050#ffe0b4ramp canon _varek.js CRIMSON; vàng kim glint ≤ 2 px/frame (ngoại lệ INV-01a)
H02 Bodan—#2a2420#4a423a#6e665c#968e82#bdb6a8#e4dcc8#f2ecdf#fbf8f1vô sắc (INV-01e): slot #e4dcc8 = r5; viền bồ hóng #2a2420 = r0; không hue
H03 Halka214#091429#102347#1e3c6b#295aa8#3680e0#6eb4ff#a8d7ff#dcefff
H04 Sậu148#08291a#0e472e#1a6b44#24b46e#30f089#66ffa5#a3ffc5#daffe8
H05 Oska236#080d29#0e1747#1a236b#1b2785#242db2#5557d4#a7a3ff#dcdaffvùng sàn đặc, lõi trắng nóng (không fill rỗng)
H06 Ruvan14#290a05#471109#6b2312#b53417#f2501f#ff8758#ffbc9b#ffe4d7
H07 Veyra126#0a2910#11471c#1f6b2a#228530#2db23a#5dd463#a9ffa9#ddffdd
H08 Dov82#192906#2b470a#476b15#578514#7bb21b#aad44d#e5ff9e#f5ffd8
H09 Kessa325#29001c#470031#6b0546#850055#b20068#d4358a#ff8cc4#ffd1e7
H10 Ingra170#052927#0a4743#146b61#138a7c#1ab89e#4edbbd#9cffe5#d8fff5khói = p.disc fill đặc 45% (trần Bible Q12), lõi xoáy #fff6f0, viền mềm 3 px r6 (không viền cứng 2 px), alpha không đồng đều (INV-01c); inv01_check --kind vfx_hero từ chối fill < 40% kèm viền 2 px (= dạng tell P)
H11 Wenna104#172913#284722#436b38#64a452#8bdb6e#beffa0#dbffc6#f1ffe8slot chỉ ở mép xẻng + vòng chân (Bible §5.3)
H12 Ambrin192#081e29#0d3547#1a556b#2389ae#2ec0e8#66e6ff#a3f4ff#dafbff

3.3 Palette môi trường theo biome

Sàn: 6 tông (mortar dark base alt alt2 lit) theo tỉ lệ HSV của sàn demo B1 (= token hub §2). Tường/đá: 4 tông (đỉnh sáng → chân tường). 3 vật liệu nhấn × 4 tông (sáng → sâu), S ≤ 40%. Đèn = màu tint vũng sáng sàn (α ≤ 0.25) — chỉ dùng cho lớp ánh sáng, không phải token palette và không vẽ thành pixel sprite/tile; #d99f82 của B3 (S 40.1%) là màu chỉ-dành-cho-đèn, pixel sau blend α ≤ 0.25 trên sàn B3 vẫn S ≤ 40%.

Biomemortardarkbasealtalt2litTường w0..w3Đèn
B1 Đồi Mộ Tro#1a1724#211d2d#2b2639#282335#2e293d#332d44#665c83 #4c4464 #3a334d #2d283c#86d2d9
B2 Đầm Vải Liệm#232f34#2d3a41#3a4a52#36444c#3e5058#455862#8bacbd #688290 #4e646f #3d4e56#cad99c
B3 Lò Đúc Câm#1b1718#211d1e#2a2526#272223#2d2829#322c2d#615658 #4a4143 #393233 #2c2728#d99f82
B4 Thành Chuông Treo#25282f#2f313a#3c3f4a#383a45#40444f#474b58#8d93aa #6a6f82 #515564 #3f424e#d9d2c3
B5 Đỉnh Chuông Câm#1d1a16#24211c#2e2a24#2b2721#312d27#37322b#6a6255 #504a40 #3e3931 #302c26#d9cda9
B6 Bờ Lặng#131318#17181e#1e1f26#1c1d23#202129#24252d#474957 #353742 #292a33 #1f2128#98a3d9
BiomeVật liệu nhấn (4 tông sáng → sâu)
B1rêu #bce0ab #87a876 #59754f #374c32 · xương #e0d7c4 #a89f8d #757061 #4c4a3e · lửa ma #9cdbe0 #68a3a8 #476e75 #2e464c
B2nước #abd7e0 #76a0a8 #4f6c75 #32454c · vải liệm #e0e0d6 #a8a89e #75756e #4c4c47 · tre mục #d4e0ae #9da879 #6a7551 #434c34
B3đồng verdigris #a7e0d2 #72a89b #4c756e #304c49 · sắt #cbd2e0 #949ba8 #666a75 #42444c · cam nung #e0b199 #a87b65 #755a47 #4c3c2e
B4đá phiến #c7cee0 #9197a8 #636775 #40424c · sắt lạnh #c0d0e0 #8a99a8 #5e6875 #3d424c · cẩm thạch xương #e0dace #a8a397 #757268 #4c4b44
B5đồng xỉn #e0cdab #a89676 #756a4f #4c4632 · tro sáng #e0dcd2 #a8a49b #75736b #4c4b45 · vàng xỉn #e0d7b9 #a89f83 #757059 #4c4a39
B6mặt gương #b9bce0 #8386a8 #595975 #3a394c · bạc nhợt #d6d6e0 #9e9ea8 #6e6e75 #48474c · đen lam #abb4e0 #767ea8 #4f5275 #32334c

3.4 Ramp thân địch theo biome (INV-01d)

Mỗi biome 3–4 họ ramp × 4 tông (e0 sáng lệch về lam-lục, e1 = hex Bible, e2 e3 tối lệch về lam-tím). S ≤ 40% mọi tông. Điểm nhấn mắt #9ff3ff (B1–B5) ≤ 10% pixel sprite; B6 không có mắt sáng (lõi tối, ramp đảo).

BiomeHọ AHọ BHọ CHọ D
B1#adb3bc #8a8f9a #5e616c #3b3d47#87958f #6b7a72 #495550 #2e3834#f5f1de #c9c2b0 #8d8578 #5c554b#726f89 #5a5470 #3b384e #242334
B2#7b9395 #5e7a7a #3f5355 #273538#b5c7c6 #8fa3a0 #617271 #3d4b4b#fdfff8 #d6d8d0 #94978e #60635a#5e6e5d #4a5a48 #313f31 #1e291f
B3#81a89d #5f8a7a #3f6157 #273f3a#817971 #6a5f58 #4a403b #312825#d7b997 #b08a6a #7b5c4a #513a31#4c484a #3e3a3c #2b282a #1d191b
B4#a0a8b5 #7d8494 #555968 #353744#778292 #5a6478 #3c4254 #252837#fdf6e7 #cfc6b8 #91877d #5f564f#606570 #4a4e5c #323440 #1f202a
B5#867f6b #6e6450 #4d4335 #332a21#bcb5a4 #9a9080 #6c6157 #473e36#5a564a #4a4438 #342e26 #221d17—
B6#adafc3 #8888a0 #5e5c70 #3c3a4a#f8f9ff #dcdce4 #9797a0 #616069#4b4c58 #3a3a48 #282732 #1a1821—

3.5 Alt tro-xương & LUT palette (INV-01d, 0 sheet thêm)

  • Mỗi trang atlas actor/VFX địch có 1 texture mask cùng bố cục <atlas>_<page>_mask.png (R = 255 ở pixel điểm nhấn: mắt, gân, lõi phép, viền đạn; còn lại 0). Export pixelfx ghi mask; bw-pack đóng gói song song.
  • Shader SpriteActor 1 pass: pixel mask = 1 và cờ alt bật → màu = LUT[row_alt][luma4(pixel)], ramp alt 4 tông #e8e4f0 #b9b5c6 #8a8699 #5b586c (S ≤ 15%).
  • Cờ alt tự bật cho cả loài khi |hue(điểm nhấn) − tâm slot hero đang chơi| < 25°. Ví dụ: mắt #9ff3ff (186°) bật alt khi chơi H10 (170°) và H12 (192°); gân #9cff6a EN_B1_05 (98°) bật alt với H08 (82°), H11 (104°); không bật với H07 (126°, lệch 28°).
  • Texture PAL_LUT 16×32 px, Point, không nén: hàng 0–11 = H01–H12 (r0..r8 của §3.2, cột 9–15 trống), hàng 12 = alt tro-xương, hàng 13 = ramp đảo lõi tối (Đòn Vọng, EN_B6_01, BS_TRUE P3), hàng 14–31 = skin Tủ Áo Tang ST_WARDROBE (mỗi skin 1 hàng, hue ±4° trong slot).
  • VFX dùng chung có tint: HERO (doc 31 §3) = sheet xám chỉ mục 9 bậc, tô bằng hàng hero đang chơi qua cùng LUT.
  • Skin hero = hàng LUT, không vẽ lại sprite; reviewer kiểm skin vẫn qua §3.1.

3.6 Token hệ thống (dùng chung mọi biome)

TokenHexVai
ink#0b0a10viền 1 px nhân vật/prop/icon (H01 #0c0a12, quái tro #0b0a12)
shadow#0a0810 α 0.45bóng sàn, bóng vật bay
void#15131dngoài sàn, viền letterbox
hot-white#ffffffchớp 1–2 frame, glint sáng nhất
hero-core#fff6f0lõi FX hero, lõi đạn phản (INV-01c)
tell-deflect#ffd84atell Y
tell-unblock#b14cfftell P
ash-neutral#e8e4f0ấn spawn 0.6 s, xoáy triệu hồi 1.0 s, viền chấm N, alt LUT
soot#2a2420viền FX H02; ấn spawn khi chơi H02 = viền gạch đứt 2 px ash-neutral
eye-cold#9ff3ffmắt/gân địch B1–B5 (≤ 10% pixel)
bile#9cff6agân EN_B1_05 (alt LUT bắt buộc)
ash-eye#f2ead8glyph ◆ Tro Nhớ, callout đổi thế (ngà, S < 15%)

3.7 Cổng kiểm màu tự động

Script Tools/artcheck/inv01_check.py (chạy py -3, dựng ở MS01; đầu vào PNG + loại hero|enemy|env|vfx_hero|vfx_enemy + id): bỏ pixel α < 0.5; lỗi khi:

  1. pixel S ≥ 45%, hue 32–62° mà ≠ #ffd84a (cho phép ≤ 2 px/frame nếu vfx_hero H01 hoặc Relic);
  2. pixel S ≥ 45%, hue 260–290° mà ≠ #b14cff;
  3. enemy/env: pixel S > 40% vượt 10% số pixel (enemy) hoặc > 0 (env); pixel hue 340–10° S > 30%;
  4. vfx_hero: pixel S ≥ 30% có hue ngoài slot ±10° của hero (trừ lõi #fff6f0, #ffffff, glint ngoại lệ; H01 dùng cửa sổ 330–23° của ramp canon);
  5. hero/enemy: V trung bình thân < 1.35 × V base biome đích.
  6. vfx_hero vùng sàn (mọi p.disc/elip sàn của hero, gồm khói H10): fill < 40% pixel elip VÀ có viền 1 màu dày 2 px (= dạng tell P "fill 25% + rim 2 px", doc 31); hoặc thiếu lõi #fff6f0.

Kết quả 0 lỗi = điều kiện cần trước khi gọi art-style-reviewer (§8.5).

54. Viền, đổ bóng, ánh sáng

MụcLuậtSố
Viền1 px ink quanh silhouette nhân vật, prop, icon; KHÔNG viền trên VFX, tile sàn, decaldày 1 px, không viền trong (trừ tách khối lớn ≤ 1 đường)
Rim runtimeshader SpriteActor cộng rim đỉnh thân: hero = màu slot r6 α 0.45; địch = (0.78, 0.90, 1.0) α 0.30; atlas PAD 2 pxrim dày 1 px, chỉ cạnh trên-trái
Nguồn sángtrên-trái, cố định toàn game (kể cả hub, portrait, key art)mặt sáng = trên + trái; tối = dưới + phải
Ramp vật liệu3–5 bậc mỗi vật liệu, lệch hue: bóng lạnh/tím-lam, sáng ấm; ≤ 4 họ ramp/nhân vật + 1 nhấn≤ 20 màu/nhân vật S, ≤ 28 M/L/XL
DitherBayer 4×4 chỉ cho mờ dần (tan xác 0.4 s) và mặt lớn ≥ 32×16 (tường, nước)cấm dither trên thân < 48 px
Chi tiết1 px chỉ ở tiêu điểm (mặt, lưỡi vũ khí, nhấn)≤ 3 cụm chi tiết/sprite S
Mặt nhân vậtđầu ×1.4–1.6 so với tỉ lệ thật (chibi anh hùng như Varek); mắt 1–2 pxhero đầu 10–12 px cao
Vòng chân heroelip floorRing rx 12 ry 6, viền 1 px r5 + fill r3 α 0.20, lớp FXBotluôn bật (INV-09)
X-rayphần thân hero bị che: silhouette slot r4 α 0.55 + viền r6 1 px (stencil 1 = hero, 2 = actor)luôn bật (INV-09)
Địch không tokenthân tối 10% (07 §8)runtime, không sheet
Chớp trúngtrắng 0.07 s qua vertex color (giữ batching)INV-10
Xáctối về 62% trong 0.35 s → tan dither 0.4 s07 §3.1
Vũng sángelip sàn additive, màu Đèn biome (§3.3), α ≤ 0.25, r 24–96, nhấp nháy ≤ 2 Hz, biên độ α ≤ 0.05chỉ dưới nguồn sáng có thật (đuốc, lò)
Sương/mây/bóng tốiluôn vẽ DƯỚI lớp tell (INV-18); α ≤ 0.35lớp FXBot hoặc Map
  • Cấm từ khoá khi viết prompt/brief: smooth cartoon, vector, painterly, HD, 3D render, soft shading, gradient, anti-aliased, realistic, side view, isometric (hub §1).
  • Cấm: góc nhìn ngang, nhìn thẳng từ trên, ô kim cương isometric, vòng sàn vẽ như 1 đường thẳng, trộn cỡ pixel, scale nhân vật lẻ, font trong Tools/pixelfx/gallery/fonts/ (không có giấy phép), tái tạo sprite/nhân vật/logo của tựa game khác.

65. Actor spec (mẫu cuối) & luật theo loại

5.1 Mẫu Actor spec

File: Design/ArtSpecs/actors/<ID>.md (1 file/actor, tiếng Việt, field tiếng Anh). Thiếu field bắt buộc (★) = không được export.

Field★Giá trị cho phép / định nghĩa
id★ID Bible (Halka H03, Ếch Vây EN_B2_02, Thống Lĩnh Yvra & Rồng Khàn BS_B4, Bù Nhìn Răm NPC_RAM)
code★mã pixelfx ASCII thường: ID viết thường (h03, en_b2_02); actor demo giữ mã cũ (§8.2)
tier★hero · S · M · L · XL · npc · summon (= mass_class Bible)
biome★Đồi Mộ Tro B1–Bờ Lặng B6 · HUB · — (hero)
rig★biped · quadruped · flyer · serpent · construct_driver · swarm (Bible §7.7; ngoài 6 loại → đạo cụ + biped)
silhouette★cao px (§2.3), rộng px, 3 khối lớn, "dấu nhận trong đám đông" (1 câu)
skeleton★override M (pelvis thigh shin upper fore neckUp headUp shoulderOut shoulderUp), bulk (head chest pelvis arm leg), phím phụ (sway, wave)
weapon★stock (sword greatsword dagger spear hammer scythe claw bow pistol launcher handle) hoặc WEAPONS.<weaponId> mới; offWeapon
ramps★≤ 4 họ × 4 tông (sáng → tối) + 1 nhấn + ink; nguồn ramp (PAL.<x> / §3.4 / §3.2); điểm phát sáng (mask §3.5)
facing★mặc định se (hero) / sw (địch) / s (NPC); xuất 8
clips★bảng: clip · frames@30 · loop · nghĩa t = 0 · hits[] · steps (12/24/30) · ghi chú (§5.2–5.5)
sockets★px từ pivot chân, hướng e, h dương = lên: foot chest head overhead hand_main hand_off + tip@hit mỗi clip đánh
reactions★skin act (char ice shock holy shadow poison), chớp, hạng khối, clip broken (M/L/XL)
phasesXLdạng mỗi pha: hàng LUT / sheet thay / phần tách (§5.4)
partsL/XL đa phầndanh sách phần: tên, pivot riêng, sortOffset px, hitbox riêng
portraitshero, NPC, L/XLbảng §5.3 / §5.6
vfx_owned★danh sách VFX_<ownerId>_<slug> thuộc actor (doc 31)
budget★trang atlas 2048² (§8.4), frames/hướng tối đa
bansđiều cấm riêng (vd khoá art H04, H11)
export★lệnh hero.mjs + bw-pack + nhóm atlas
review★inv01_check = 0 lỗi · check.mjs sạch · art-style-reviewer = pass · ngày

5.2 Hero — bộ clip (khung 30 fps; chân tay bước 12 fps, H01 30 fps)

ClipBắt buộcFramesLoopt = 0Ghi chú
idle✔48✔—thở, vũ khí đúng tư thế thủ
run✔18✔—runtime chỉnh tốc phát theo vận tốc; tốc chạy 130–145 px/s
dash✔9–12khung 0 = i-framecự ly 72–96 px (INV-12); afterimage runtime
attack1..attack3 (+ attack4..6 nếu combo dài)✔28–48/đònkhung chạmwindup ép vào startup CSV; freeze nướng sẵn bị packer bỏ
dash_attack✔24–36khung chạmđánh sau Lướt
answer✔9–15khung mở cửa sổ ĐÁPtự xoay theo kẻ tấn công (INV-11); 360°
answer_hit✔15–24khung phảnkhi ĐÁP thành công
hold_in / hold_loop / hold_out✔6–12 / 12–24 / 6–9– / ✔ / –—verb giữ riêng hero
sk01..sk08✔30–110khung nhả8 kỹ năng; hạng III đổi tham số, không clip mới
ul1..ul3✔60–150khung nổ chínhbất tử suốt clip
hurt✔9–12—≤ 0.40 s
death✔60–95—khung cuối nằm sàn, giữ
wake✔30–45—thức dậy bên Lửa Canh / vào phòng
victory✔45–60—thắng boss
hub_idle✔60–90✔—đứng trong hub
select✔48✔—tư thế màn chọn hero (chỉ hướng se)
as2_fin, as3_fin✔30–48khung chạm≤ 1 clip mới/Dạng Rèn (Bible §6); thân dùng chung AS1
  • Dạng Rèn = node tools/hero.mjs <code> --weapon <w> --as <code>_as2 (thân giữ, vũ khí đổi); chỉ Dạng Rèn đang lắp được nạp vào RAM.
  • Ngân sách: ≤ 8 trang 2048² cho hero đang chơi (gồm Dạng Rèn đang lắp + VFX riêng); ≤ 1.400 frame/hướng cho mọi clip của 1 hero.

5.3 Hero — socket, portrait, tư thế chọn

  • Socket mặc định (hướng e, px, h lên): foot (0,0) · ring elip rx 12 ry 6 · chest (0,22) · head (0,34) · overhead (0,46) (Ấn, ◆ Tro Nhớ, !; glyph trạng thái nằm trên vòng chân, doc 31 R7) · hand_main (8,20) · hand_off (−6,20) · back (−4,24). Hero cao ≠ 36 → nhân h theo cao/36.
  • Đổi hướng socket (quy ước pixelfx, y xuống): offset sàn (x tới, d ngang) + cao h, hướng θ (0 = e, π/2 = s): sx = x·cosθ − d·sinθ · sy = 0.5·(x·sinθ + d·cosθ) − h.
  • tip@hit: toạ độ mũi vũ khí ở khung chạm của từng clip đánh (hướng e) — runtime đặt glint/tia lửa/đạn ở đây.
PortraitKích thướcLuật
por_<code>_hud32×32đầu + vai, vẽ lại (không thu nhỏ từ bust), viền ink, rim slot 1 px dưới-phải
por_<code>_bust128×1283/4 mặt hướng phải-màn, sáng trên-trái, tóc/vũ khí vượt khung trên ≤ 8 px; 3 biểu cảm neutral resolve grief; nền trong suốt
por_<code>_select192×192toàn thân cao 150–176 px, chân tại y = 184, tư thế khoe vũ khí + gợi verb ĐÁP; 1 vòng thở 24 frame @12 fps; vòng chân slot vẽ trên sàn; không chữ
  • Portrait theo thang UI = thang world (cùng zoom); ramp portrait = ramp sprite + tối đa 2 tông trung gian; không gradient mịn.

5.4 Khoá art 12 hero

IDCaoSilhouette & dấu nhậnweaponCấm
H01 Varek36tóc trắng vuốt ngược, khăn đỏ thẫm 2 đuôi, giáp vai có sừngreaver (có sẵn)đổi canon demo
H02 Bodan42khổng lồ hiền, vai rộng nhất roster, áo vải tang nâu, nắp quan tài gỗ đóng đinh làm lưỡicoffin_lidmàu slot (vô sắc)
H03 Halka38mũ sắt cổ cao, áo choàng ngắn lam, giáo 65 px treo 3 chuông nhỏbell_speargiáo ngắn hơn 1.6 × thân
H04 Sậu34áo thô xắn tay, túi phấn hông, la bàn gỗ; compa 2 chân lưỡi 30 pxdividerváy, mũ vải buộc cằm, ruy băng, kim, hình nhân giấy
H05 Oska32thấp đậm, tạp dề da, cẳng tay to; đe 12×10 px trên xích 40–72 pxchain_anvilfill vùng rỗng
H06 Ruvan37thợ phụ lò đúc, tạp dề cháy xém, 2 găng sắt to bằng đầu, khe găng sáng slotforge_gauntletlửa vàng (dải tell)
H07 Veyra37thợ săn đầm, áo da cá xếp vảy, cung sườn cao 44 px, ống tên xươngrib_bowmũ trùm che mặt
H08 Dov35nữ pháo thủ trẻ, áo khoác dài đội đèn đêm, nòng loa 30 px, đai 2 ổ đạnbell_firelockkhói đen che thân
H09 Kessa34cô gái làng vàng mã, búi tóc cài que giấy, thòng lọng xâu xu lỗ vuôngcoin_lassoxu/giấy màu vàng tell (xu = ngà + slot)
H10 Ingra34 (khom)bà đồng già duy nhất, khăn quấn đầu, tay áo rộng, lư trầm cán 48 pxcenser_staffkhói fill đặc che hero khác
H11 Wenna3619 tuổi, tay áo xắn, đất bám, xẻng cao 44 px (to hơn người)grave_spademũ trùm, đèn lồng, bia đá xích trên lưng, hồn/xác trồi khỏi hố, ánh teal/cyan; slot chỉ mép xẻng + vòng chân
H12 Ambrin37trưởng phường kèn trẻ, khăn tang trắng quấn đầu, áo the dài, kèn loa đồng 26 pxfuneral_hornnhạc cụ khác ngoài kèn trên thân

5.5 Địch theo hạng (hợp đồng clip = demo 04 §4.1, mở rộng)

ClipSM (Tinh Anh)L (mini-boss)XL (boss)Luật
idle24–36 L36 L42 L42–60 Lthở
walk/run/fly24 L24 L24–30 L24–30 Lruntime chỉnh tốc phát
attack, attack2..30–38 (1–2 đòn)41–56 (3 đòn)40–60 (≤ 5 đòn)40–80 (≤ 8 đòn/pha)t = 0 = khung chạm, stop: 0; pose windup cuối giữ ≥ 3 frame (runtime kéo theo windup CSV, INV-03 ≥ 0.30/0.45 s)
hurt9101010giật lùi
death17–18 (≤ 0.6 s)496079–120khung cuối nằm sàn
spawn19 (loài trồi đất)24intro 45intro 60–90ấn tro 0.6 s do runtime (INV-14)
broken (Vỡ Thế)—36 L36–42 L42 Lquỳ/loạng choạng, đọc rõ "đánh đi"
phase———45–60 / phachuyển pha bất tử (Bible §7.5)
biến thể thế đáp—0 clip0 clip≤ 1 clip/bossđổi tham số + 1 pose tell (Bible §7.7)
  • Quái KHÔNG có VFX trong clip, trừ sáng gắn thân (mắt, gân, lửa đầu gậy) — glint vàng, vùng tím, đạn, tro là việc của runtime + sheet VFX (doc 31).
  • Không root motion: chân giữ gần pivot; quãng lao do code.
  • Ngân sách = frame DUY NHẤT/hướng sau dedupe bw-pack = Σ ceil(frames × steps / 30): S ≤ 160 · M ≤ 260 · L ≤ 520 · XL ≤ 600/pha; frame thô 30 fps chỉ dùng định thời, không có trần. Field budget.frames_per_dir_max trong av/*__actor_sfx.json = số sau dedupe. Mọi quái S + Tinh Anh của 1 biome chung 1 nhóm atlas (GROUPS.<biome>, ≤ 4 trang S + ≤ 3 trang M/L).
  • Rig dùng chung: 1 rig tứ túc cho EN_B4_04 / MB_B4_1 / rồng BS_B4 (Bible §7.7); bầy hạt (swarm) = VFX loop + thân lõi ≤ 16 px, không xương.
  • Ấn Tinh Anh (EM01–EM16): không đổi sprite; hiển thị = glyph Ấn 8×8 px trên overhead + viền thân 1 px màu ramp biome e0 (không vàng/tím); EM07 Ẩn Ảnh mờ 40% thân nhưng tell/viền/glint/vòng sàn 100%.
  • Tro Nhớ: Tinh Anh/boss đổi thế → glyph ◆ ash-eye 0.6 s trên overhead + mắt loé; không vẽ đè tell (Bible §8.4).

5.6 Boss — đa phần & dạng pha

  • Đa phần (construct_driver, cưỡi, 2 đầu): mỗi phần 1 sprite con, pivot riêng, sortOffset cố định (px, theo sy), không đổi thứ tự sort giữa các frame; phần bị đánh chớp riêng; mỗi phần ≤ 96 px cao.
BossPhần (sortOffset)Silhouette & dấu nhậnDạng phaCấm
BS_B1 Người Gác Chuôngthân + chuông búa (0)canon demo: gù cao 72, búa chuông verdigrisP2 nứt chuông, mắt + vết nứt eye-cold (không tím); P3 chuông vỡ hẳn: thay sheet idle/walk (_p3)đổi canon demo; vết nứt tím
BS_B2 Lão Lái Đò Không Bếnbè vòng rìa (−8) + lão đò (0)lão gầy còng, nón lá rách vành rộng, áo tơi rơm, sào tre dài 2 × thân, bè tre buộc dây gaiP2 rời bè: sheet bộ; P3 nước dâng = tile sân, không đổi thânáo choàng trùm đầu che mặt; thân xương lộ; xu/đồng tiền trả đò dưới mọi dạng; đèn lồng treo mũi đò
BS_B3 Thợ Cả Đúc Chuôngcỗ máy (0) + buồng lái (+4) + vũ khí rèn (+6, --weapon 3 loại)cỗ máy lò đúc 2 tay kìm, ống bễ lưng, buồng lái kính đồng, thợ cả nhỏ bên trongP2 gãy tay: phần tay ẩn, buồng lái sáng eye-cold; P3 lò vỡ: hàng LUT tối 20%lửa vàng S ≥ 45% (dải tell); khung người máy đứng thẳng kiểu giáp lái
BS_B4 Thống Lĩnh Yvra & Rồng Khànrồng (0) + Yvra (+6) khi cưỡi; tách = 2 actor độc lậpYvra giáp lá tro, thương dài thẳng 1.5 × thân, cờ đuôi rách; rồng tro tứ túc cổ dài, cánh rách, họng khàn (rig chung §5.5)P2 tách thân; P3 cưỡi lạilưỡi glaive cong lưỡi liềm; thú cưỡi họ mèo/báo; motif trăng (khuyết, tròn, quầng)
BS_FINAL Vua Dravosthân (0) + Mũ Chuông (+2)vua gầy cao 96, áo bào tang tro rách, Mũ Chuông hình chuông úp (miệng loe, quai đỉnh) ramp tro/ngà = B5 họ B (#bcb5a4 #9a9080 #6c6157 #473e36) + đỉnh ash-eye #f2ead8, Lưỡi Vọng Gãy cầm tayP2 bóng boss Hồi = sheet boss gốc + hàng LUT 13 (ramp đảo); P3 mũ nứt sáng #fff6f0vương miện gai/chóp nhọn; ánh/sương ma màu bạc hà, teal, xanh lục; VFX nhập hồn vào đại kiếm; Mũ Chuông không hình chuông
BS_TRUE Cái Lặngbầy hạt (−4) + lõi tối (0)không mặt, không chi; bầy hạt tro quanh lõi tối hình chuông câmP3 Gương Lặng = sprite hero đang chơi + LUT 13mặt/mắt/miệng nhân hình; xúc tu
  • Đổi pha bằng: (1) hàng LUT (0 sheet), (2) ẩn/hiện phần, (3) sheet _p2/_p3 chỉ cho clip đổi silhouette. ≤ 3 trang 2048² cho mỗi boss, gồm mọi pha.
  • Điểm yếu/phần lộ: sáng eye-cold hoặc #fff6f0 viền 1 px; KHÔNG vàng/tím (dành cho tell).
  • Cột "Cấm" là cổng art-style-reviewer (§8.5 bước 3): khớp 1 mục cấm = fail. Boss/mini-boss trùng ≥ 3 trục (thân · đòn đặc trưng · nguyên tố/màu · đạo cụ) với 1 nhân vật có thật = fail dù không khớp mục cấm nào.

5.6b Khoá art mini-boss (hạng L, §2.3)

IDCao (px)Silhouette & dấu nhậnCấm
MB_B1_1 Xà Ích Xe Tang72 (xe dài 96)người lái gầy đội nón tang trên xe tang 2 bánh gỗ, ngựa gỗ khung sườn kéo; quan tài xếp chồng sau xengựa xương có lửa; xe ngựa đen sang trọng có đèn lồng
MB_B2_1 Mẹ Kén Tơ Tro64 (dài 88)tứ túc nhện thân dẹt, 6 chân khớp xương, kén tro treo thành chùm ở chân sau; dây tơ tro nhìn thấy được nối kén ↔ thântúi trứng dưới bụng; dây tơ vô hình/trong suốt; mặt người trên thân nhện; vương miện
MB_B2_2 Cá Voi Xácđầu lộ 96vây lưng 48 px + gợn sàn khi lặn; đầu cá voi da bong, xương hàm lộ, 4 lỗ súng laovây cá mập; đèn mồi trên đầu
MB_B3_1 Cỗ Máy Bước802 chân khớp gà, thân nồi đồng, tấm giáp sáng ở bộ phận bị đánh nhiềubuồng lái kính kiểu giáp lái; tay súng
MB_B3_2 Gã Hai Đầu Lò76đầu to = đầu thợ đúc trọc, hàm vuông; đầu nhỏ = lò bễ ghép trên vai phải, miệng song sắt nhỏ giọt đồng; da ramp B3 họ Cda xanh lam/xám; mũ pháp sư, gậy, rune phát sáng; 2 đầu ngang cỡ cùng loài; phép thuật dưới mọi dạng (đầu nhỏ là cấu trúc, không phải pháp sư)
MB_B4_1 Rồng Hai Đầudài 96tứ túc rig chung §5.5, 2 cổ: đầu lửa-tro họng hẹp, đầu sừng xoắn3 đầu trở lên; cánh đầy đủ; màu lửa vàng S ≥ 45%
MB_B4_2 Kiếm Sĩ Gương64kiếm sĩ áo giáp vảy gương mảnh, đầu trần tóc buộc, 1 kiếm thẳng; ảnh giả viền tro rỗngáo choàng tối trùm đầu; thương/giáo; > 4 ảnh cùng lúc
  • Ảnh MB_B4_2 tối đa 4 (gồm bản thật), khớp Bible §7.4 ("2–4 ảnh").

5.7 NPC hub

  • 7 NPC (NPC_ULLA GREM CALLA LEM HOL MOTT RAM), cao 34–44 px, không clip chiến đấu: idle 48 L, talk 24 L, react 24, action 30–60 (hành động trạm: rèn, chở đò, gõ chuông, ghi sổ…). Xuất hướng s se (lật sw).
  • Bù Nhìn Răm NPC_RAM (bù nhìn, Sân Tập) thêm hurt 9 + windup_y / windup_p giữ (dùng đúng tell Y/P/N của INV-02).
  • Nhóc Lem NPC_LEM (cậu bé đã chết): không xác, không máu; dấu duy nhất = viền thân ash-neutral 1 px khi đứng yên > 3 s.
  • Portrait NPC: por_<code>_bust 128×128 × 3 biểu cảm, cùng luật §5.3. Palette NPC: ramp ấm trầm S ≤ 40%, không slot hero, không dải tell.

5.8 Ví dụ điền mẫu — Halka H03 Halka (rút gọn)

  • code h03 · tier hero · rig biped · facing se.
  • silhouette: cao 38, rộng 22; khối: mũ sắt cổ cao + áo choàng ngắn + giáo 65 px chéo lưng; dấu nhận: đường giáo dài nhất roster + 3 chuông.
  • skeleton: M {pelvis 17.6, thigh 7.6, shin 7.4, upper 7.0, fore 6.8, neckUp 3.3, headUp 4.8, shoulderOut 5.8, shoulderUp 2.0} · bulk {head 1.45, chest 1.0, pelvis 1.0, arm 1.0, leg 1.05} · weapon WEAPONS.bell_spear (cán 52 px gỗ sồi PAL.wood, mũi 13 px PAL.metal, 3 chuông 3×3 px PAL.metal sáng) · offWeapon không.
  • ramps: mũ/giáp PAL.metal 4 tông · áo choàng #a8d7ff #6eb4ff #295aa8 #102347 (slot r6/r5/r3/r1) · da #ffe2c4 #f8c9a0 #e0a074 #a8664a · vải PAL.dust; nhấn = chuông; ink #0b0a10.
  • clips riêng: attack1..3 chọc 30/30/36 (tip@hit e: (62, 22)); sk_plant cắm sào 45; hold_* Nhảy Sào (cung 60 px, bất tử 0.35 s); answer Gõ Chuông 12 (xung r48 tại kẻ tấn công = VFX, không trong clip).
  • vfx_owned: Vỡ Âm (H03_VO_AM, r90 quanh điểm kích): cò ANSWER_HIT (Gõ Chuông trún… VFX_H03_toll_burst (Vỡ Âm r90), Dấu Vang trên địch: enter_fx của ngưỡng TOLL_RESONANT (2 Vang) và TOL… VFX_H03_vang_mark (dấu Vang 1–3 trên địch, overhead địch), 39 sheet khác theo doc hero.
  • budget: 7 trang · export: node tools/hero.mjs h03 → node Tools/bw-pack.mjs h03.

76. Môi trường — tile & prop

6.1 Lưới & loại tile (Unity Tilemap, PPU 16)

LoạiÔ trên màn (art px)Ô sàn thậtCell UnityBiến thểGhi chú
FLOOR32×1632×32 px(2, 1)1 gốc + 7 biến thể, trọng số 60/402–3 phiến đá/ô, mạch mortar 1 px; = ô spatial hash 32 px
FLOOR_DETAIL16×816×16(1, 0.5)8vết nứt, rêu nhỏ, sỏi — Tilemap con
EDGE (sàn → vực/nước)32×16 + mặt rơi 24 px—(2, 1)RuleTile 47 ô (blob 8 hướng)mặt rơi = wall w2→w3 + dither tối đáy
WALL_N (tường Bắc/Đông/Tây)đỉnh 32×16 + mặt đứng 48 px—(2, 1) + sprite đứngRuleTile 16 ô (4 hướng)đỉnh w0, mặt w1/w2, chân w3
WALL_S (rìa Nam, hướng camera)đỉnh 32×16 + mặt ≤ 16 px—(2, 1)RuleTile 16lan can thấp: không bao giờ che hero
LIQUID (nước B2, đồng nguội B3, gương B6)32×16—(2, 1)8 frame @8 fps looptrang trí; nguy hiểm thì là hazard Y/P/N (INV-18)
PIT (hố H11, hố sụt)runtimer24—1 sheet VFXtile không vẽ sẵn hố
  • Mọi tile vẽ sẵn phép chiếu 3/4 (phiến đá là hình chữ nhật nằm, cao = ½ rộng); cấm ô kim cương.
  • Seam: biến thể FLOOR liền mép 4 cạnh; kiểm bằng ghép lưới 8×8 ô.
  • Mật độ chi tiết: ≤ 30% ô FLOOR có FLOOR_DETAIL; vùng giữa phòng (r ≥ 120 quanh tâm) ≤ 15% để tell đọc rõ.

6.2 Chiều cao, che khuất, sort

  • Prop/tường đứng = sprite trên lớp GamePlayLayer1, pivot = chân (giữa cạnh đáy footprint), Y-sort với nhân vật.
  • Cao tối đa: prop trong sân đấu ≤ 48 px; tường Bắc 48–64 px; rìa Nam ≤ 16 px; cột/tháp > 64 px chỉ ở rìa ngoài vùng an toàn 427×267.
  • Che hero: prop > 24 px mờ về α 0.45 trong 0.15 s khi pivot hero nằm sau pivot prop và trong khung sprite prop; hero luôn có x-ray 55% (INV-09).
  • Footprint va chạm = hình chữ nhật/elip trên sàn (px sàn thật), ghi trong spec prop; sprite không quyết định va chạm.

6.3 Decal

  • Lớp Map (trên tile, dưới FXBot); không va chạm; 8–64 px; ≤ 120 decal/phòng; S ≤ 40%.
  • Cấm decal giống tell: không vàng/tím, không vòng chấm ash-neutral, không gạch chéo, không elip sáng viền 2 px.
  • Decal động từ gameplay (vệt cháy, tro xác): pool 64, sống 8 s, tan dither 0.5 s; ưu tiên xoá cũ nhất.

6.4 Mẫu Tile/Prop spec

File: Design/ArtSpecs/env/<biome>_<slug>.md.

FieldGiá trị
idENV_<Bx>_<slug> (vd Bia thấp 14 px (demo gravestone_a/c). Chân 12×6 px sàn, va chạm rect,… ENV_B1_gravestone_a) — dùng làm tên file sprite thường
kindFLOOR FLOOR_DETAIL EDGE WALL_N WALL_S LIQUID PROP PROP_ANIM DECAL LIGHT
sizekhung px; với PROP: footprint sàn (w×d px thật) + cao đứng px
pivotpx trong khung (chân / giữa đáy)
palettetông từ §3.3 (base, w1, nhấn <vật liệu>), ≤ 12 màu
variantssố biến thể + trọng số; seed pixelfx
animframes @fps, loop (đuốc 8 @8, lá cờ 6 @6, nước 8 @8)
collisionkhông / hình sàn
occlusioncó mờ khi che (cao > 24 px)
lightvũng sáng: r, α, màu Đèn biome
sourcebw-props.mjs <name> / pixelfx src/fx/bladewake/prop-*.js / vẽ tay
reviewinv01_check env = 0 lỗi + reviewer
  • Prop có sẵn (Hồi I, g008-demo): ash_stain bone_pile bones_scatter brazier crack_a crack_b gravestone_a/b/c iron_cage moss_patch pillar pillar_broken rubble skull_candles statue_broken — tái dùng/recolor sang biome khác trước khi vẽ mới.
  • Mỗi biome tối thiểu: 1 bộ FLOOR (8), 1 bộ EDGE 47, 1 bộ WALL_N 16 + WALL_S 16, 12 prop, 8 decal, 2 prop động (nguồn sáng), 1 LIQUID nếu biome có nước. Hub HUB_BELL_TOWER: 8 trạm ST_* mỗi trạm 1 prop chủ 48–64 px + 2 prop phụ.

87. Key art & capsule Steam

7.1 Hướng

  • Cảnh chủ: H01 Varek tiền cảnh 1/3 dưới, hướng se, giữa nhát Trăng Máu (Trăng Máu H01_UL1) — cung trăng đỏ thẫm lõi #fff6f0; biển Thây Tro (EN_B1_01) palette lạnh B1 lùi dần lên trên; Đại Chuông Vọng câm làm bóng đen đỉnh khung; tro sáng rơi ngược.
  • Bản phụ (MS sau): 12 Kẻ Thức xếp vòng quanh chuông, mỗi người viền slot (dùng khi đủ roster).
  • Palette: void + sàn B1 + ramp H01; vàng/tím tell KHÔNG xuất hiện trong key art (dành gameplay).
  • Pixel thật: vẽ ở độ phân giải gốc rồi phóng NEAREST số nguyên; cấm làm mịn, cấm vẽ mịn rồi pixel hoá.
  • Logo chữ "BLADEWAKE": chữ pixel nét 3–4 px, vết nứt chuông cắt ngang chữ A thứ hai, ngà #f2ead8 + viền ink + bóng đỏ thẫm 1 px; bản tối và bản sáng.

7.2 Kích thước (gốc → phóng)

Tài sảnĐích (px)Gốc (art px)×kLuật
Header capsule920×430230×1084cắt 2 px dọc; logo ≥ 55% rộng
Small capsule462×174231×872chỉ logo + mặt Varek; logo ≥ 66% rộng
Main capsule1232×706308×1774cắt 2 px dọc
Vertical capsule748×896187×2244
Library capsule600×900150×2254
Library header920×430= header4
Library hero3840×1240480×1558không logo, không chữ
Library logo1280×720320×1804nền trong suốt
Page background1438×810360×2034cắt 2/2 px; mờ, ít chi tiết giữa
Ảnh chụp1920×1080480×2704chụp in-game, không chỉnh, HUD bật ở ≥ 3/5 ảnh
  • Capsule chỉ có art + logo: không chữ quảng cáo, giải thưởng, điểm đánh giá.
  • Nguồn ảnh: theo rule image-generation (dùng lại → vẽ tay/pixelfx → agy → bf-img chỉ khi user cho phép); mọi ảnh AI grid-snap về gốc và qua art-style-reviewer = pass.

98. Pipeline sản xuất với pixelfx

8.1 Các bước (1 actor; VFX theo checklist doc 31 §12)

#BướcLệnh / nơiRa
1Viết Actor specDesign/ArtSpecs/actors/<ID>.md (§5.1)spec đủ field ★
2Nhánh làm việctrong Tools/pixelfx: nhánh từ g008-demo tên art/<code>không commit thẳng g008-demo
3Costume + vũ khísrc/fx/heroes/_<code>.js (defineCostume, RAMPS) · vũ khí mới WEAPONS.<weaponId> trong _<code>.js hoặc _<weaponId>.js—
4Clipsrc/fx/heroes/<code>-<clip>.js = effect + act (windup t < 0, khung nhả, hits, recovery); quái: stop: 0, không VFX trong clip—
5Nhìn – sửa ≥ 3 vòngnode tools/render.mjs heroes/<code>-<clip> --dirs · node tools/act.mjs heroes/<code>-<clip> --dir s và --dir n · đọc records/.../contact.pngđọc được ×1 cả 8 hướng
6Kiểm máynode tools/check.mjs heroes/<code>-<clip> sạch (biên, kết rỗng, seam, seed, < 2 ms/frame, act keys, tay nhảy)0 lỗi
7Xuấtnode tools/hero.mjs <code> [clips] → records/heroes/<code>/<clip>/<dir>/{body,vfx,vfx-back}.png/json8 hướng
8Đóng góinode Tools/bw-pack.mjs <code> (cắt viền, gộp frame trùng, bỏ freeze nướng, giữ e se s n ne, trang 2048², PAD 2)<code>_<page>.png + <code>.json + <code>_<page>_mask.png
9Nhập Unitychép vào Assets/ArtAsset/Characters/<code>/ (actor) · Assets/ArtAsset/Vfx/Pixel/<owner>/ (VFX) · Assets/ArtAsset/Environment/<Bx>/PixelArtImportRules tự áp
10Cổng duyệt§8.5pass ghi vào spec
11Đăng ký dữ liệuatlas id + map clip → state trong data actor (doc hero/quái)—

8.2 Đặt tên

  • code actor mới = ID viết thường (h05, en_b3_04, el_b4_01, mb_b2_2, bs_b4, npc_mott); mã demo giữ: varek=H01 · thrall=EN_B1_01 · ghoul=EN_B1_02 · hexcaster=EN_B1_03 · bulwark=EN_B1_04 · bloater=EN_B1_05 · gravecleaver=EL_B1_01 · bellwarden=BS_B1.
  • Clip: snake thường (attack1, sk03, ul2, hold_loop, as2_fin). Dạng Rèn xuất: <code>_as2, <code>_as3.
  • File sheet chưa đóng gói: <code>-<clip>-<dir>.png/json; atlas: <code>_<page>.png, <code>.json, <code>_<page>_mask.png; ánh sáng tách <base>_light.png dùng JSON của <base>.
  • VFX: ID VFX_<ownerId>_<slug> (Bible §11) → file vfx_<ownerid>_<slug>[-<dir>].png/json (thường hoá), thư mục chủ.
  • Portrait: por_<code>_<hud|bust|select>[_<expr>].png → Assets/ArtAsset/UIPixel/Portraits/.
  • Môi trường: env_<bx>_<slug>.png → Assets/ArtAsset/Environment/<Bx>/.

8.3 Nhập Unity (khoá, PixelArtImportRules.cs)

  • Filter Point · Compression None · mipmap tắt · Full Rect · Wrap Clamp · WORLD_PIXELS_PER_UNIT 16 (world: actor, VFX, tile, prop) · UI_PIXELS_PER_UNIT 25 (UI, portrait) · pixelsPerUnitMultiplier luôn 1.
  • Cắt sheet: PNG + JSON cùng stem → mỗi frame 1 sprite theo frames[i].frame; pivot = meta.pixelfx.pivot (sheet trim: pivot trừ offset nguồn). PNG không có JSON = 1 sprite.
  • Phát: fps = meta.pixelfx.fps (30); loop theo meta.pixelfx.loop; khung chạm = hitFrames/act.hits.
  • Sorting layer (demo Gfx.cs): Map < FXBot < Object < GamePlayLayer1 < GamePlayLayer2 < GamePlayLayer3 < FxLayer < Prioritize < BattleDmgText < UI < UITop; trong 1 actor: vfx-back < body < vfx. Ánh xạ 5 lớp VFX: doc 31 §2.4.

8.4 Ngân sách bộ nhớ (≤ 21 trang 2048² thường trú, Bible §10.3)

NhómTrangNạp/xả
Hero đang chơi (+ Dạng Rèn đang lắp + VFX riêng)≤ 8đầu run
Quái S biome hiện tại≤ 4đầu Hồi, xả Hồi trước
Tinh Anh biome≤ 3đầu Hồi
Boss Hồi HOẶC mini-boss đang đấu≤ 3mini: nạp khi chọn nút MBS, xả sau màn thưởng; boss: khi vào hàng R5; không bao giờ cùng lúc
VFX dùng chung + prop≤ 3thường trú
  • Tổng 8 + 4 + 3 + 3 + 3 = 21 trang (Bible §10.3). BS_B4 nạp gói theo pha (đỉnh 3.0 trang), xả gói pha trước khi nạp pha sau.
  • Tile biome nằm ngoài 21 trang (1 trang 2048² RGBA32/biome, xả theo Hồi). Vượt trần → gộp clip/giảm frame, không tăng trang.

8.5 Cổng duyệt (thứ tự, dừng ở lỗi đầu tiên)

  1. node tools/check.mjs <id> sạch.
  2. py -3 Tools/artcheck/inv01_check.py <png> --kind <loại> --id <ID> = 0 lỗi (§3.7).
  3. Contact sheet 8 hướng (--dirs) + 2 strip act.mjs --dir s|n + 1 ảnh in-game trên sàn biome đích ×1 và ×4 → gửi subagent art-style-reviewer (đọc hub §0 + §3/§4/§7) → phải trả pass.
  4. Test 5 s (P4) với actor mới giữa 200 quái B1: người thử gọi đúng tên hero/hạng địch ≥ 80%.
  5. Ghi review vào spec (ngày, kết quả); fail → sửa, chạy lại từ bước 1.
  6. Ảnh AI (portrait, key art) dùng thang image-generation; prompt dựng bằng art-style.py build; bf-img chỉ khi user cho phép; luồng tự động ghi "need bf-img".

109. Quy tắc cho dev/AI

  • Đọc hub .claude/docs/ArtStyle.md §0 + nhóm liên quan trước mọi việc hình ảnh; doc này cụ thể hoá hub cho 1.0, không thay hub. Mâu thuẫn số → Design Bible thắng, rồi doc này, rồi hub; báo dev để sửa hub (không tự sửa hub từ task này).
  • Không export actor khi spec thiếu field ★ (§5.1); không đưa vào Assets/ khi chưa qua §8.5.
  • Mọi màu lấy từ bảng §3.2–§3.6 hoặc PAL.<x> của pixelfx; không tự đặt ramp song song. Màu mới → thêm vào bảng ở doc này kèm lý do + chạy lại §3.7.
  • Hero mới/skin mới: giữ slot ±10° (skin ±4°), đổi bằng hàng LUT, không vẽ lại sprite.
  • Địch: S ≤ 40%, không đỏ thẫm, mắt/gân ≤ 10% pixel và có mask để alt LUT tự bật.
  • Mọi vòng/vùng/bóng trên sàn là elip 2:1 theo §2.1; không bao giờ vẽ vòng sàn như hình tròn đứng hay 1 đường.
  • Không xoay sprite để ngắm; dùng sheet 8 hướng hoặc sprite đối xứng tròn.
  • Không đổi PPU, filter, nén của sprite pixel; không zoom lẻ; camera snap 1 art px.
  • Quái không mang VFX trong clip (trừ sáng gắn thân); glint/vùng tím/đạn là sheet VFX + runtime (doc 31).
  • Hero/boss/mini-boss: khớp 1 mục cột "Cấm" (§5.4, §5.6, §5.6b) = fail, không ngoại lệ; actor mới chưa có dòng khoá → thêm dòng (silhouette + Cấm) trước khi vẽ.
  • Vùng sàn hero luôn đặc + lõi #fff6f0 (INV-01c); không mượn dạng tell P (fill 25% + viền 2 px) cho bất kỳ FX hero nào.
  • Không tái tạo sprite, nhân vật, logo của tựa game có thật; tên/thiết kế luôn tự đặt; không ghi tên game/studio/thương hiệu vào file trong repo.
  • Tác giả code pixelfx trên nhánh art/<code> cắt từ g008-demo; push/merge chỉ khi dev đồng ý.

1110. Quyết định đã chốt

QQuyết địnhLý do
Độ phân giải art480×270 ×4 (1080p), Deck 427×267 ×3, công thức §2.2Bible §10.4 khoá; demo 01 640×360 là lịch sử
PPU world16 (world), 25 (UI); demo runtime PPU 1 bỏhub §1 + PixelArtImportRules.cs; Tilemap ô (2,1) gọn
Phép chiếusy = 0.5·fz + h, vòng sàn elip 2:1, không bù tốc theo trục= pixelfx VIEW.tilt 0.5, 1 nguồn sự thật cho art + gameplay
Ramp hero8 bậc + lõi #fff6f0, sinh từ signature_hex, hue ±10° ngoài 2 dải tellINV-01b/c; 1 ramp dùng cho export và LUT
Môi trườngS ≤ 40% mọi pixeltổng quát trần "cam nung S ≤ 40%" của B3; tự động tránh 2 dải tell (S ≥ 45%)
Alt tro-xươngtexture mask điểm nhấn song song atlas + PAL_LUT 1 passINV-01d: 0 sheet thêm, 0 trang atlas thêm
2026-11-07 — vết nứt P2 BS_B1demo 04 §3 "mắt + vết nứt sáng tím" → eye-cold #9ff3ffINV-01a cấm tím S ≥ 45% ngoài tell P; tránh đọc nhầm thân boss là vùng phải Lướt
2026-11-07 — ramp H01giữ CRIMSON canon (8 bậc, r0 330° → r6 22°) dù 4 bậc lệch > 10° khỏi tâm 354°; inv01_check dùng cửa sổ 330–23° cho H01; mọi hero khác ±10°INV-01b áp cho slot; demo canon Varek khoá; 22° vẫn ngoài 24–70°; slot H06 (4–24°) giữ ΔE 59 theo Bible
Mã actorID viết thường; 8 mã demo giữ nguyênASCII ổn định, không dấu; không phá asset demo
Bộ nhớ≤ 21 trang 2048² thường trú, chia §8.4Bible §10.3; Varek demo = 8 trang
Portrait32 / 128 / 192 px, vẽ lại từng cỡđọc rõ ở HUD, hội thoại, màn chọn; không thu nhỏ mờ
Key artpixel gốc phóng NEAREST số nguyên, cắt ≤ 2 pxgiữ VP1 trên mọi capsule
2026-11-07 — khói H10p.disc fill đặc 45%, lõi xoáy #fff6f0, viền mềm 3 px r6, alpha không đồng đều; gate §3.7 mục 6 từ chối fill < 40% + viền 2 pxbản cũ "trong suốt, viền slot" trái INV-01c + Bible Q12; 5 đĩa teal rỗng viền đọc như viền tell P giữa 200 quái
2026-11-07 — khoá boss§5.6 thêm cột Silhouette + Cấm; BS_FINAL cấm vương miện gai, ánh ma bạc hà/teal/lục, nhập hồn đại kiếm; Mũ Chuông giữ hình chuông, ramp tro/ngà; BS_B4 cấm glaive lưỡi liềm, thú cưỡi họ mèo, motif trăng; BS_B2 cấm áo trùm xương, motif xu trả đòarchetype vua tang/kỵ sĩ cưỡi thú/lái đò người chết dễ trôi về nhân vật có thật; cấm cụ thể = reviewer chấm được
2026-11-07 — ramp nhấn môi trườnglửa ma B1 e2 #466e75 → #476e75, cam nung B3 e2 #755946 → #755a47 (= file biome); #d99f82 B3 chỉ là tint đèn2 tông cũ S 40.2% vượt trần môi trường S ≤ 40%; 1 nguồn sự thật với data/ biome
2026-11-07 — khoá mini-bossthêm §5.6b (7 MB); MB_B3_2 đầu nhỏ = lò bễ ghép vai (cấu trúc), cấm da lam/xám, đồ pháp sư, 2 đầu ngang cỡ; MB_B2_1 kén tro + tơ thấy được, cấm túi trứng bụng, tơ vô hình; MB_B4_2 cấm áo choàng tối trùm đầu, giáo, > 4 ảnhMB_B3_2 bản cũ trùng ≥ 3 trục (thân, đòn, nguyên tố) với 1 nhân vật có thật = ngưỡng "không an toàn" của dự án
2026-11-07 — trần §5.5 đếm frame sau dedupengân sách frame/hướng = frame duy nhất sau dedupe bw-pack; L 360 → 520; frame thô không có trầnbảng clip M tối thiểu 302 thô; L 520 phủ mini lớn nhất MB_B2_1 507; data trước đó khai 3 cách (thô, thô + dòng lệch, dedupe)
2026-11-07 — tách slot mini-boss §8.4hàng "Tinh Anh + mini-boss ≤ 3" → "Tinh Anh ≤ 3" + slot "Boss Hồi HOẶC mini-boss đang đấu ≤ 3" dùng chung, không bao giờ nạp cùng lúc; tổng vẫn 21 trangB2 cần 0.75×2 + 2.5 + 2.5 = 6.5 trang, B3 6.5, B4 ≈ 4.25 (MB_B4_1 riêng 2.75): không biome nào vừa 3 trang chung