13-checklist-content-artist.md · Cập nhật lần cuối: 2026-09-05 08:45 +07 · sha256 nguồn 95f4e7026a3513 — Checklist content cho artist
Nguồn framework:
docs/framework/11-content-inventory.md§1–§13 (kiểm kê đếm từng dòng),docs/framework/03-particles-vfx.md§2,docs/framework/04-sound.md§2,docs/framework/05-characters-pets-enemies.md§2,docs/framework/06-juice-game-feel.md§2,docs/framework/08-architecture-and-scale.md§2,docs/framework/10-monetization-iaa-iap.md§6,[liveops catalog: SCREEN_CATALOG.md]. Cấp bằng chứng: L1 ANALYSIS — dựng lại clean-room từ disasm + metadata + quan sát runtime; không phải source gốc. Mỗi dòng bên dưới mang nhãn bằng chứng riêng. Nhãn của doc 11:scene= đọc thẳng từMain.unity(kèm số dòng),disasm= Hex-Rays tại RVA,metadata=dump.cs,asset= file trong cây export. Trạng thái: SHIPPED = người chơi 1.1.59 chạm được · HIDDEN = có đủ code + asset nhưng không có đường vào · R1-OUT = thuộc SDK ads/IAP, chỉ ghi nhận · UNKNOWN = chưa đếm được.
Mục tiêu
Artist cần biết một game idle thương mại thật ship bao nhiêu content mỗi loại, và mỗi loại cần asset gì (sprite tĩnh, Spine, atlas, màu, âm thanh, font ảnh) để ước lượng khối lượng cho game tương tự. Trang này gom toàn bộ con số đã đếm trong doc 11 thành bảng theo lớp content, mỗi dòng kèm nguồn và trạng thái. Doc 11 chỉ đếm, không ước lượng giờ công — phần "Việc của artist" ở cuối là hướng dẫn suy ra từ các con số, không phải sự thật SOT.
Game gốc làm gì
Tổng quan quy mô (doc 08 §2.2, doc 11 §12.2, SCREEN_CATALOG §1):
| Chỉ số | Con số | Mức bằng chứng | Nguồn |
|---|---|---|---|
| Scene trong build | 1 (Main), 505 MB export đã giải mã, 142 626 object |
asset-census | doc 11 §12.2 |
MonoBehaviour instance / định danh script duy nhất / class Assembly-CSharp được instance |
30 082 / 221 / 191 | scene | doc 11 §7 |
ParticleSystem |
7 718 (+7 718 renderer) | scene | doc 11 §11 |
Sprite .asset (export) / atlas |
650 / 2 (Cat 125, _UI 374; 4096×4096 ASTC 6×6) |
asset | doc 11 §12.2 |
| Texture2D | 135 .png |
asset | doc 11 §12.2 |
| AudioClip | 16 .ogg (15 dùng, 1 là mẫu SDK) |
asset | doc 11 §9 |
| Spine skeleton | 13 (spine 4.1.24, JSON) |
asset | doc 11 §2.2 |
| Font | 13 = 9 TTF + 4 font ảnh | asset | doc 11 §10.1 |
| Ngôn ngữ / term I2 | 14 / 317 | asset | doc 11 §10.2 |
Nhân vật mèo + skin (doc 11 §1)
| Tên / id | Số lượng | Bằng chứng | Trạng thái |
|---|---|---|---|
Class Cat (~100 field) |
1 class, 3 instance (Cat_list[0] người chơi, [1..2] AI follower) |
metadata dump.cs:593002; scene Main.unity:20324824 |
SHIPPED |
Tham số đàn Cat_manager |
FormationRadius 2.5 · SeparationRadius 1.8 · SeparationStrength 3 |
scene 20324828..20324830 |
SHIPPED |
| Animator mèo | Cat.controller, Cat_UI.controller; 10 clip (Idle, Idle_0, Walk, Walk_0, Walk_1, Attack, Death, Death_0, Spawn, Ready) |
asset | SHIPPED |
| Skin mèo | 25 (Skin_list 25; Skin_Unlock, Price_Balance, Skin_Colors, Skin_sprites, Skin_Bone_sprites đều 25) |
scene 20325750 |
SHIPPED |
| Asset mỗi skin | 2 sprite (thân + "bone"/nét) + 1 màu; tên sprite là số (0_4, 12_7…) |
scene | SHIPPED |
Chỉ số skin (tuyến tính theo index i) |
Damage = 16·i, Speed = 10·i, Money = 5·i, Price = 100·i Dia |
scene | SHIPPED |
Mèo preview UI (Cat_Demo) |
3 | scene | SHIPPED |
⇒ Hệ skin = 50 sprite + 25 màu, không Spine, không animation riêng (dùng chung Cat.controller).
Pet (doc 11 §2)
| Tên / id | Số lượng | Bằng chứng | Trạng thái |
|---|---|---|---|
Bậc pet trong Pet_manager.Pet_list |
10 hàng; Degree_Colors 13; Pet_sprites 13 |
scene 20323954 |
SHIPPED |
| Kho pet / ô đã chọn | 16 ô / 3 ô | scene | SHIPPED |
Nhãn bậc (Pet_Info_UI.Degree_objs) |
13: D, C, B, A, S, SS, SSS, X, XX, XXX, Z, ZZ, ZZZ |
scene | SHIPPED |
| Ánh xạ bậc → Spine | 0 Slime · 1 Slime2 · 2 Frog · 3 Acorn · 4 PinkRabbit · 5 BlackCat · 6 Chicken · 7 Pigeon · 8 Dove · 9 Bee · 10 Griffin · 11 Ghost · 12 PillowGhost | scene (286 tham chiếu skeletonDataAsset = 13 × 22, node con Skin (New)/0..12) |
10 SHIPPED / 3 HIDDEN (G160, G161) |
| Bộ Spine mỗi pet | JSON + .atlas.txt + PNG + _SkeletonData.asset + _Atlas.asset (13 mỗi loại) |
asset | SHIPPED |
| Money / MoveSpeed bậc 0..9 | 2.0/2 · 6/4 · 18/8 · 55/14 · 170/22 · 520/32 · 1 600/44 · 4 900/58 · 15 000/74 · 46 000/92 | scene | SHIPPED |
Pet_manager.Balance_Reload |
DEAD CODE (0 code-xref) ⇒ bảng cố định từ scene | disasm RVA 0x2B17E78 |
— |
| UI pet | PetInfo_UI 34 obj · Draw_Info_UI 35 · Pet_UI 565 (lưới 16 + 3) · NewPet_UI 24 · Pet_Dummy 19 |
scene | SHIPPED |
⇒ 13 bộ Spine + 13 sprite UI + 13 màu; Griffin / Ghost / PillowGhost có đủ art nhưng không có hàng Pet_Info — art đã xong, gameplay chưa bật.
Súng, đạn, FX đạn (doc 11 §3)
| Tên / id | Số lượng | Bằng chứng | Trạng thái |
|---|---|---|---|
Gun_list |
65 khẩu = 13 bậc × 5 (bậc = GunNum / 5); Gun_sprites 65; Degree_Colors 13 |
scene 20307967; disasm DrawRandomGun RVA 0x2B0A278 |
SHIPPED |
Nhãn 13 bậc (Gun_Info_UI.Degree_objs) |
D, C, B, A, S, SS, SSS, X, XX, XXX, Z, ZZ, ZZZ |
scene 20420884..20420896 |
SHIPPED |
| Kho súng / ô trang bị | 16 ô (-1 trống) / 3 ô |
scene | SHIPPED |
GunType |
7: SINGLE 8 khẩu · SHOTGUN 5 · PIERCE 13 · LASER 13 · EXPLOSIVE 12 · MISSILE 10 · BLAST_SNIPER 8 | metadata dump.cs:596519; scene |
SHIPPED |
| Tên súng | tiếng Hàn thô trong Gun_list[].Name (ví dụ 초보자 권총, 관통 ZZZ); bản dịch nằm trong 317 term I2, chưa nối term↔index |
scene | SHIPPED (tên hiển thị: UNKNOWN) |
| Damage bậc thấp → cao | 100 (#0) … 7 500 000 000 (#60); AtkSpeed 0.05 – 1.1 | scene | SHIPPED |
Pool Bullet / Bullet_FX |
27 / 10 GameObject | scene 20317279 |
SHIPPED |
Bullet.Skin_particles / Bullet_FX.Skin_particles |
65 / 65 (1 slot mỗi khẩu) | scene 20794906, 20808833 |
SHIPPED |
| Biến thể FX trúng riêng biệt | 45 node <bậc>_<họ>: Normal 5 (bậc 0–4) · Laser 12 (1–12) · Fireball 11 (2–12) · Missile 9 (4–12) · Rocket 8 (5–12) |
scene (45 con của Bullet_FX) |
SHIPPED |
Bullet_Mesh (mesh đạn) |
1 215 instance | scene | SHIPPED |
Vật thể Gun cầm tay (có Shoot_particle = muzzle) |
345 instance; 65 slot Cat.Gun_list; 345 PS tên Muzzle |
scene | SHIPPED |
| UI súng | GunCollection_UI 1 702 obj (65 Gun_Item_Collection) · GunInfo_UI 33 · Draw_Info_UI 35 · GunList_UI 669 · kho 16 ô · NewGun_UI, Gun_Merge_Tutorial |
scene | SHIPPED |
| Súng thưởng quảng cáo | gun #14 (유탄 발사기, EXPLOSIVE bậc B), hạn 1 800 s | metadata | R1-OUT |
| Tự-ghép | AutoMerge_Exclude_Degree = 7 ⇒ không ghép bậc ≥ X |
metadata + disasm RVA 0x2B0ACE0 |
SHIPPED |
Súng "bậc cao" của Mission (HighTier_Gun_Table) |
8 khẩu: #16 드럼 샷건 (A) · #18 플라즈마 캐논 (A) · #20 개틀링건 (S) · #22 화염 캐논 (S) · #24 전갈 미사일 (S) · #25 관통 SS · #27 레이저 SS · #29 폭발레이저 SS | metadata (blob SHA-256, G353) + scene Gun_list |
SHIPPED (nơi dùng bảng: UNKNOWN) |
| Súng thưởng StepUp / nền DailyGun | StepUp 5: #23 유령 저격총 (S) · #28 미사일 SS · #33 미사일 SSS · #39 폭발레이저 X · #44 폭발레이저 XX; DailyGun nền: #20 (S) · #30 (SSS) · #35 (X) | metadata (blob SHA-256, G353) + scene | SHIPPED (offer R1-OUT, súng là content thật) |
Mỗi biến thể FX trúng là một node có nhiều ParticleSystem con (Glow, Ring, Trail, SparkTrail, SemiCircles, SmokeTrail…) — đây là lý do scene có 7 718 ParticleSystem. Đây là khối lượng VFX lớn nhất của game.
Kẻ địch, boss, raid (doc 11 §5)
| Tên / id | Số lượng | Bằng chứng | Trạng thái |
|---|---|---|---|
Enemy.Type |
6: Tree=0, Tree_SpeedRun=1, BossMonster=2, Monster=3, Ore=4, RaidBoss=5; Enemy 1 933 instance |
metadata dump.cs:595437; scene |
SHIPPED |
Cây Tree |
501 (5 Tree_Grid × 100 + Boss_tree 1); sprite 40 = 10 chủ đề map × 4 bậc |
scene 20614875 |
SHIPPED |
| Hệ số bậc cây | Degree_Health_Balance = {1, 1.8, 3, 35} · Degree_Money_Balance = {1, 1.8, 3, 100} |
disasm Tree_manager..cctor RVA 0x2B46094 |
SHIPPED |
Tỉ lệ bốc bậc (Tree_Grid.degreeRates float[5,4]) |
hàng = level 0..4, cột = bậc 0..3: 80/20/0/0 · 50/45/5/0 · 20/55/25/0 · 5/35/60/0 · 0/15/85/0 (%) — bậc 3 không bao giờ bốc từ lưới, chỉ là Boss_tree ⇒ artist: 3 bậc cây thường + 1 boss |
metadata (blob SHA-256, G353) + disasm consumer | SHIPPED |
| Đặt cây trên lưới | 10 × 10 ô, chọn theo đường cong Morton + lấy mẫu cách đều ⇒ phủ đều, tất định; jitter nhỏ | disasm (G343) | SHIPPED |
Tree_SpeedRun |
190, dùng lại Tree_sprites |
scene | SHIPPED |
Quái Monster (Hunt) |
20 sprite (10 chủ đề wave × 2 thường/quái-boss) + 10 màu; pool 240; Health_Balance 2 000 wave; mật độ MonsterCountPerLevel [90, 120, 160, 200, 240], nhịp spawn [0.35, 0.2, 0.17, 0.12, 0.08] s |
scene 20297237; disasm SkinSprite_return RVA 0x2AFB480, MonsterColor_return 0x2AF9250; blob G353 |
SHIPPED |
Quái không có Animator |
nhấp nháy bằng MaterialPropertyBlock, 2 cỡ Size_Big / Size_Small |
metadata dump.cs:594503 |
SHIPPED |
Quặng Ore |
1 000 pool; 2 sprite (0_2, 1_dia) |
scene | SHIPPED |
| Boss rồng | 9 (BlackDragon, EmeraldDragon, GoldenDragon, GreenDragon, GreyDragon, IceDragon, MechanicalDragon, PurpleDragon, RedDragon); 27 sprite đầu (idle/normal/die × 9); 9 sheet 2048×1024 ASTC 8×8; có Animator; Health_Balance 1 000 stage |
scene 20443894, 20655096..20655104 |
SHIPPED |
| Raid worm | 5 (GreenWorm, IceWorm, MechanicalWormTypeB, MosquitoWorm, VolcanoWorm) + Raid.png; Raid_manager A=0, mọi mảng serialize rỗng; UI Raid_UI 690 obj |
scene 21128970..21128974 |
HIDDEN (G153) |
| Thanh máu / phụ trợ | EnemyColl 1 933 · Enemy_Slider 1 931 · SpriteFill 1 931 · Bounce_Custom 1 939 · SlicedFilledImage 93 (UI, không phải máu địch) |
scene | SHIPPED |
Stage, map, chế độ chơi (doc 11 §6)
| Tên / id | Số lượng | Bằng chứng | Trạng thái |
|---|---|---|---|
| Stage chính | 5 000 stage tiền-tính (Stage_Health_Balance / Stage_Money_Balance 5 000); 5 level/stage; hiển thị Stage {S+1}-{L+1} |
metadata dump.cs:602135; disasm RVA 0x2B45820, 0x2B156E4 |
SHIPPED |
| Chủ đề map chính | 10 (Ground_sprite_list 10); mỗi Map_Grid (12 ô) có Border_Up 10 · Border_Down 10 · Upper_sprite_Color 10 |
scene 20634957, 20825393 |
SHIPPED |
| Bộ art 1 map | 1 nền đất + 1 border trên + 1 border dưới + 1 màu + 4 sprite cây ⇒ 10 map × 7 asset = 70 asset | scene | SHIPPED |
Play (SpeedRun) |
190 cây Tree_SpeedRun xếp vòng tròn (bán kính scene 22 / 70), số cây clamp(15·stage+20, 20..190), bậc 1/1.8/3, 60 s, map dùng lại 10 chủ đề (stage % 10); thưởng 30 dia (×4 auto) — G406 |
scene + disasm | SHIPPED |
| Mine | 1 000 Ore, 2 sprite, Perlin noise (noiseScale 0.085, noiseThreshold 0.517), vành r 8..20; màn 60 s; chỉ 100 quặng đầu có sprite dia (quirk game gốc) |
scene + disasm (G393) | SHIPPED |
| Hunt / Boss | Hunt: 2 000 wave × 5 level, 90–240 quái/level, spawn ellipse xoay 45°, quái to máu ×3, rào HP 1; Boss: 1 000 stage, skin = Stage % 9 (9 rồng xoay vòng — đủ art cho mọi stage), 60 s, đĩa HP vẽ bằng Shapes — G408 |
scene + disasm | SHIPPED |
| Stage mở từng chế độ (lịch content cho hoạ sĩ) | Rebirth 3-1 · Mine 4-1 · Fish 6-1 · Boss 10-1 · Pet 12-1 · Hunt 12-1 · Trip 35-1 (ngưỡng 20/30/50/90/110/110/340, Stage_Value_Max đếm 10 mỗi stage; chưa đủ ⇒ cảnh báo "mở ở stage N") |
disasm (7 handler nút, G395) | SHIPPED |
| Máu / tiền cây theo stage | seed 250 / 20, ×3 mỗi stage cắt 2 chữ số (250, 750, 2200, 6600, 19000…) — hoạ sĩ không cần asset thêm, chỉ 4 bậc sprite × 10 map | disasm + scene (G395) | SHIPPED |
Trip (Adventure) |
3 bối cảnh map (Forest, Desert, Tundra — UI gọi "Glacier") × 5 bản ghi/vùng (ý nghĩa 5 bản ghi chưa chốt — không đếm 15 bối cảnh art); 5 bậc mở theo Trip Lv [0,1,3,6,10], 5 thời lượng chuyến [1,2,4,8,16] h (blob SHA, G353); MaxLv 15, Exp_balance 15 cấp (scene 10 … 920 là bảng sống — hex blob; công thức trong code chỉ là fallback, G361); vé 20, nạp 1/4 h (xác nhận tĩnh, G321); 4 Core_sprites |
scene 20323786; doc 11 §6.3, doc 07 §2.9 |
SHIPPED |
| Fish | 13 bậc (MAX_GRADE 12), bể 20 ô; 39 sprite cá (Fish_sprites + Fish_Real_sprites + Fish_Outline_sprites × 13); GachaChances [60, 30, 10, 0] (scene; mặc định ctor [40, 30, 20, 10] — scene thắng, G353) = 4 bậc gacha, PremiumGachaCost 200 Dia; bể nạp save: hoãn khi ẩn, ≤ 20 con |
scene 20930271; G327 |
SHIPPED (2 hàng cuối bảng chỉ số: UNKNOWN) |
| Raid | 5 worm = 5 boss xoay theo tuần (tuần kể từ 2024-01-01 mod 5); mỗi tuần một loại súng được buff (EXPLOSIVE / LASER / MISSILE / BLAST_SNIPER / PIERCE ⇒ cần 5 badge súng); loadout 3 ô; 30 s; boss hồi sinh sau mỗi lần giết; 10 dia (20 auto). Bảng scene rỗng, không có nút HUD — G406 | scene + disasm | HIDDEN |
Màn hình / panel UI (doc 11 §7; SCREEN_CATALOG §3)
| Tên / id | Số lượng | Bằng chứng | Trạng thái |
|---|---|---|---|
Nhánh gốc dưới Canvas / panel cấp 1 / panel cấp 2 |
18 / 78 / 73 | scene | SHIPPED |
Nút HUD chính (Main_UI/Btn_list) |
27, trong đó 7 có Locked_obj = 7 cổng mở khoá (Rebirth ≥20 · Mine ≥30 · Fish ≥50 · Boss ≥90 · Pet ≥110 · Hunt ≥110 · Trip ≥340) |
scene; G151 | SHIPPED |
| Nhánh lớn nhất | Mission_maanger (sic) 3 725 obj (Mission_UI 3 294) · Gun_manager 1 771 · Contents_UI 1 784 · Adventure_manager 955 · Shop_manager 667 |
scene | SHIPPED |
Mỗi chế độ chơi (Contents_UI) |
Monster_UI 253 · SpeedRun_UI 301 · Boss_UI 304 · Mine_UI 235 — mỗi cái có *_Start_UI + GameEnd/Win/Fail/Sweep_obj (~47–65 obj mỗi cái) |
scene | SHIPPED |
HUD in-game từng chế độ (SafeArea/{Boss,Mine,SpeedRun,Monster}_UI) |
19 / 14 / 19 / 37 obj | scene | SHIPPED |
| Raid UI | Contents_UI/Raid_UI 690 (Raid_GunSelect_Popup 501) + SafeArea/Raid_UI 19 |
scene | HIDDEN |
Instance UnityEngine.UI / TextMeshPro |
7 991 / 4 957 | scene (đếm theo guid) | SHIPPED |
| Tutorial | 4 bước (0, 2, 3, 4_hand) |
scene | SHIPPED |
| Hệ thống | Setting_UI 40 · DataLoad/DataSave_UI 15+15 · Redeem_UI 11 · Update_Panel ×2 · Error_UI · Alert_list · Info_UI 54 · Review |
scene | SHIPPED |
Shop, IAP, gói liveops (doc 11 §4.6, §7.5; doc 10 §6)
| Tên / id | Số lượng | Bằng chứng | Trạng thái |
|---|---|---|---|
| Product id IAP | 34 (32 trong IAPProductCatalog.json + 2 chỉ có ở code: catgunner_luxury_pass, catgunner_luxury_upgrade) — đính chính con số 24 cũ (G162) |
disasm ItemIdxFromProductId RVA 0x2B2DE44; asset |
R1-OUT |
| Nhóm product | bỏ quảng cáo 2 · gói tiện ích 4 · kim cương 5 · VIP 2 · Core 7 · Rebirth 1 · StepUp 5 · DailyGun 3 · PlusPack 3 | asset | R1-OUT |
| Panel IAP (instance) | IAP_PriceText 58 · Core_Purchase_Panel 7 · Inapp_Purchase_Panel 6 · Inapp_Purchase_Popup 5 · Dia_Purchase_Panel 5 · VIP_Purchase_Ingame 5 · RemoveAds_Purchase_BannerReward 11 · PlusPack_Inapp_item 7 · SaleValue_UI 12 · FreeCash_Banner 13 |
scene | R1-OUT |
| StepUp / DailyGun / PlusPack / WeeklyShop / DiaPig | 5 bậc, 7 ngày (208 obj) / 3 sản phẩm xoay tuần (124) / 3 loại, 7 ngày / 4 vị trí (226) / tick 60 s (57) | scene; metadata | SHIPPED (IAP R1-OUT) |
DailyCheck |
7 phần thưởng Dia 70, 200, 400, 600, 800, 1000, 1500 (127 obj) |
scene | SHIPPED |
| Buff | 2 nút (PowerBuff_Btn, MoneyBuff_Btn), icon On_obj/Off_obj; 300 s / trần 900 s; Buff_UI 60 obj |
scene 20339104; metadata dump.cs:592886 |
SHIPPED |
AD_Type |
10 vị trí thưởng quảng cáo | metadata dump.cs:584959 |
R1-OUT |
Relic, upgrade, nhiệm vụ, mùa (doc 11 §4.3–4.5, §8)
| Tên / id | Số lượng | Bằng chứng | Trạng thái |
|---|---|---|---|
| Relic | 15 = 3 lõi (Forest, Desert, Tundra) × 5; bảng nâng cấp 300 cấp × 3; DrawPrice 20; Relic_Draw_Popup 196 obj, Relic_Item_Demo 27 |
scene 20345666 |
SHIPPED |
| Upgrade thường | 3 dòng (Power, Speed, Money), bảng 10 001 hàng × 4 |
scene 20353393 |
SHIPPED |
| Upgrade rebirth | 3 dòng, MaxLv 20000, Price_balance 20 001; RubyUpgrade_UI 81 obj, Rebirth_FX 11 |
scene 20451280 |
SHIPPED |
| Nhiệm vụ | 23 = 20 thường + 3 VIP; 4 Mission_Type (TreeCount 6+2 · StageClear 6+1 · Rebirth 6 · PlayMine 2) |
scene 20427316; metadata dump.cs:587114 |
SHIPPED |
| Battle-pass | 2 tuyến (Normal / Epic) × 25 cấp; 8/25 cấp mỗi tuyến thưởng súng (GunNum), còn lại Dia; Max_Lv 25, Exp_balance 100/cấp |
scene | SHIPPED |
| Mùa / xếp hạng | NewSeason_UI ×2 (153 obj mỗi cái); 3 bảng xếp hạng (StageRanking, BossRanking, MonsterRanking); Rank_UI 279 obj; không có hệ thành tựu riêng |
scene | SHIPPED (trigger reset mùa: UNKNOWN) |
Âm thanh (doc 11 §9 — ánh xạ SfxType → clip đã trích từ scene 20661551)
SfxType |
Clip | Dài | SfxType |
Clip | Dài | |
|---|---|---|---|---|---|---|
0 Pop |
Popup1.ogg |
0.16 s | 8 Shoot |
etfx_explosion_sharp.ogg |
0.53 s | |
1 Button |
Pop 6.ogg |
0.30 s | 9 Select |
Click.ogg |
0.10 s | |
2 Spawn |
Special & Powerup 45.ogg |
1.86 s | 10 Enter |
Transition_In.ogg |
0.99 s | |
3 Fusion |
Prize Wheel Spin 2 Reward.ogg |
2.43 s | 11 Win |
Positive.ogg |
2.07 s | |
4 Upgrade |
Special & Powerup 43.ogg |
1.50 s | 12 Fail |
Fail.ogg |
0.40 s | |
5 Dont |
ClickyButton5a.ogg |
0.27 s | 13 UnSelect |
Click.ogg (dùng lại #9) |
0.10 s | |
6 Rebirth |
etfx_explosion_chargeup2.ogg |
3.80 s | 14 Tick |
GenericButton14.ogg |
0.06 s | |
7 Purchase |
Prize Wheel Spin 2 Reward.ogg (dùng lại #3) |
2.43 s | BGM | Relaxed_7_BlossomDrift 121.26 s · Cute_5_MilkShake 105.00 s |
Tổng dùng: 13 SFX + 2 nhạc nền = 15 clip; espannol.ogg (2.38 s) là asset mẫu của SDK, 0 tham chiếu — R1-OUT. Chống trùng trong scene:
blockSameFrameDuplicate = 1, blockCooldownDuplicate = 1, cooldownSeconds = 0.05. Không nhạc theo chế độ, không voice, không ambience.
Font, bản địa hoá (doc 11 §10)
| Tên / id | Số lượng | Bằng chứng | Trạng thái |
|---|---|---|---|
| Font TTF thật (TextMeshPro / SDF) | 9: NotoSansSC-Bold, NotoSansJP-Bold, MPLUSRounded1c-Black, Mitme (font chính), Thai, ARIAL, LiberationSans, Inconsolata-SemiBold, PerfectDOSVGA437; 20 SDF atlas Alpha8 |
asset | SHIPPED (0 công vẽ) |
| Font ảnh (bitmap) | 4: Damage, Damage (Cri), Money_Cri, Dia — mỗi font = bảng 42 glyph + 1 atlas PNG (512² ×3, 256² ×1) + 1 prefab text bay |
asset; disasm DamageTextObject.InitSprites RVA 0x2A544C8 |
SHIPPED — phải giữ nguyên atlas |
| Bộ 42 glyph (giống nhau ở cả 4) | + . 0–9 B K M T a–z — 26 chữ thường là chữ cái đơn vị của InfVal_change(), nhưng nét vẽ là chữ HOA |
asset | SHIPPED |
m_FontData độ dài 0 |
đúng thiết kế (bảng + PNG chính là font), không phải TTF hỏng — đính chính G012 (xem G163) | asset | — |
Ngôn ngữ / term / component Localize |
14 / 317 / 819; 2 term font, font (outline) hoán font theo ngôn ngữ |
asset I2Languages.asset |
SHIPPED |
Đây là lời giải cho UNKNOWN "hoa/thường của đơn vị" ở doc 01 §3.5.1: chuỗi luôn viết thường, chỉ khác font vẽ nó; 1 formatter duy nhất (InfVal_change RVA 0x44E47D4, 29 caller), không có ToUpper trên đường floating-text.
VFX (doc 11 §11)
| Tên / id | Số lượng | Bằng chứng | Trạng thái |
|---|---|---|---|
ParticleSystem |
7 718; top tên: Glow 1 034 · Ring 597 · Trail 567 · SparkTrail 459 · Muzzle 345 · SemiCircles 324 · SmokeTrail / InnerRing 297 |
scene | SHIPPED |
| Tên GameObject-VFX riêng biệt | 78 = 45 gốc <bậc>_<họ> (mỗi cái pool 37) + 33 tên con/độc lập |
scene | SHIPPED |
| Texture VFX gốc | ≈ 30 (nova_6x3, explosion_round_3x3, magic_line, ring, glow1, Coin1..4, Fx_Cash…) |
asset | SHIPPED |
| Mesh VFX | 4 (ETFX_AuraVertical, ETFX_Rocket2, Ring02, RingMesh02) — gói gốc EpicToonFX |
asset | SHIPPED |
Pool hạt Particle_Polling |
3: Slime_Polling, Dust_Polling, Money_Polling |
scene | SHIPPED |
ParticleImage (hạt trên UI) |
52 | scene (đếm theo guid) | SHIPPED |
FXThrottle |
MIN_INTERVAL 0.05 · MIN_DIST_SQ 2.25 · MAX_PER_FRAME 3 |
metadata dump.cs:596485 |
SHIPPED |
Công thức / pseudocode
Trang này là bảng kiểm kê. Cách tự đếm lại (doc 11 §0, SCREEN_CATALOG §0 — streaming YAML, không mở cả file 505 MB):
!u!1 -> GameObject: m_Name, m_IsActive, m_Component
!u!4 / !u!224 -> Transform / RectTransform: m_GameObject, m_Father => cây cha-con
!u!114 -> MonoBehaviour: m_GameObject + m_Script{fileID, guid} => class (qua .cs.meta / .dll.meta)
!u!198 / 199 -> ParticleSystem / ParticleSystemRenderer
# Đơn vị "màn hình" = GameObject con trực tiếp của Canvas, Canvas/SafeArea, Canvas/Contents_UI
# KHÔNG đếm component Canvas (20/21 Canvas là override sorting cho Fish_item)
# Mảng serialize (Gun_list, Skin_list, Pet_list, Tree_sprites…) đọc thẳng tại số dòng ghi trong doc 11
Cách ước lượng asset cho một lớp content (gợi ý, suy từ cấu trúc SOT):
asset(lớp) = số_đơn_vị × asset_mỗi_đơn_vị
skin mèo : 25 × (2 sprite + 1 màu)
pet : 13 × (1 Spine rig + 1 atlas + 1 PNG + 1 sprite UI + 1 màu)
súng : 65 × 1 sprite + 45 FX trúng + 345 muzzle (1 / vật thể Gun)
map : 10 × (1 nền + 2 border + 1 màu + 4 cây)
boss : 9 × 3 sprite đầu + 9 sheet 2048×1024
font bay : 4 × 42 glyph vẽ tay
Bẫy đã gặp
- 4 font
m_FontDatarỗng là font ẢNH, không phải TTF hỏng. Thay bằng TTF sẽ âm thầm đổi nét đơn vị (HOA → thường) và metric glyph; cũng không được thêm.ToUpper()— chuỗi SOT vốn viết thường. 4 file.ttf0 byte trong một export cũ là file bịa, phải loại bỏ (doc 11 §10.1; G012 → G163). - Ánh xạ
SfxType → clipđã có, nhưng không suy từ tên.ButtondùngPop 6.ogg,PopdùngPopup1.ogg; 2 cặp dùng chung clip (doc 11 §9). - Số IAP là 34, không phải 24.
mine_ticket,fish_free,banner_*,sp_iap,reward_hub,f_cashlà chuỗiplace/analytics, không phải product id (doc 11 §7.5; G162). - Bậc súng/pet là 13, không phải 10.
Weapon_Get_Countschỉ 10 phần tử và tooltip nói "10등급" — header sai lệch; code chia 65/5 = 13 bậc (doc 11 §3.1). - Content ẩn: Raid (5 worm, 690 obj UI) và 3 bậc pet cao nhất (Griffin/Ghost/PillowGhost). Art đã xong, không có đường vào — đừng tính vào workload "người chơi thấy", nhưng tính vào workload "đã vẽ" (G153, G161).
- Đếm Canvas không phải đếm màn hình — 20/21 Canvas là canvas lồng cho
Fish_item (0..19)(SCREEN_CATALOG §1; G152). - Bảng cân bằng là mảng scene, không phải hàm sinh —
Balance_Reloadcủa Gun/Pet/Upgrade/Rebirth đều dead code (doc 09 §3.2; G138a). Số trong bảng trên đọc từ scene. - Tên sprite là số (
0_4,12_7,20) — tên gốc studio đặt; giữ nguyên, đừng "đặt lại cho đẹp" trong restore. - Hai atlas 4096² cho toàn bộ game —
.spriteatlaskhông được export (G013) nhưng bảng packing có; spriteHandvắng trong export (G014) là gap định dạng, không phải content thiếu.
Checklist khi tự làm
- [ ] Lập bảng content theo lớp trước khi vẽ; mỗi dòng có id, số lượng, asset mỗi đơn vị, trạng thái (shipped / hidden).
- [ ] Nhân vật chính: 1 rig Animator (~10 clip) + skin = 2 sprite + 1 màu mỗi skin; SOT có 25.
- [ ] Pet: Spine (1 phiên bản runtime thống nhất), mỗi pet 1 rig + atlas + PNG + 1 sprite UI + 1 màu; SOT có 13 bộ.
- [ ] Súng: 1 sprite/khẩu (65) + FX trúng theo bậc × họ (45, không phải 65) + 1 muzzle/vật thể súng.
- [ ] Kẻ địch đông: sprite tĩnh + shader animation (
MaterialPropertyBlock), 2 cỡ; rigAnimatorchỉ cho boss (9) / raid boss (5). - [ ] Game feel không cần camera shake / hit-stop: ngân sách art là squash 0.2 s, số bay, hạt (8 hạt dia, 5/15 hạt cây), 15 sfx có volume theo hàng, rung một chỗ (G410).
- [ ] Chỉ 3 shader sprite tuỳ biến cho toàn game: thanh máu batch (
Fill Amount Batched, 1 931 material, premultiplied), quái nhấp nhô (MonsterBounce, 240), cắt kim cương (DiamondClipSprite, 6) — tất cả trong suốt, không LOD (G366). - [ ] Map: mỗi chủ đề = nền + 2 border + 1 màu + 4 bậc cây (7 asset); SOT có 10 chủ đề.
- [ ] Atlas: 2 × 4096² ASTC 6×6 (nhân vật ~125 sprite, UI ~374 sprite); boss dùng sheet riêng 2048×1024 ASTC 8×8.
- [ ] Âm thanh: 2 nhạc nền + ~13 SFX ngắn (≤ 4 s) là đủ; đầu tư vào chống trùng, không vào số lượng.
- [ ] Font số bay: 4 atlas × 42 glyph vẽ tay (số,
+,.,B K M T,a–zvẽ nét HOA) — hạng mục dễ bị bỏ sót nhất. - [ ] UI: ~18 nhánh gốc / ~78 panel; mỗi chế độ chơi có
Start_UI+Win/Fail/Sweep; mỗi feature cóInfo_UI+Draw/Popup; shop–IAP > 40 panel/popup instance. - [ ] Bản địa hoá: tách term ngay từ đầu (SOT 317 term, 14 ngôn ngữ, 819 component
Localize), có term chọn font theo ngôn ngữ. - [ ] Ghi rõ content ẩn trong bảng để không tính nhầm vào workload phát hành.
Việc của artist (hướng dẫn ước lượng, KHÔNG phải sự thật SOT)
Suy từ các con số đã đếm, một game tương tự cần cỡ: 50 sprite skin + 25 màu (1 nhân vật, 25 skin); 13 bộ Spine pet (10 dùng ngay); 65 sprite súng + 45 node FX trúng (mỗi node nhiều particle con) + muzzle; 40 sprite cây + 20 sprite quái + 10 màu + 2 sprite quặng; 9 boss (27 sprite đầu + 9 sheet lớn) và 5 raid boss nếu bật; 39 sprite cá; 10 bộ map × 7 asset; 15 map Trip; 15 icon relic; ~30 texture VFX dùng chung; 2 atlas 4096² (~500 sprite UI/nhân vật); 4 font ảnh × 42 glyph vẽ tay; 15 clip âm thanh; ~78 panel UI + hơn 40 panel/popup shop–IAP. Doc 11 cố ý không quy ra giờ công — con số giờ là việc của team bạn.
Điều chưa biết (UNKNOWN)
Chép từ doc 11 §13 và các mục đang mở:
- ~~20 giá trị
Tree_Grid.degreeRates~~ — ĐÃ GIẢI (G353): bảng ở mục kẻ địch; kỹ thuật SHA-256 đóng mọi bảng khởi tạo mảng còn lại. HighTier_Gun_Table(8 khẩu) dùng để làm gì — UNKNOWN (giá trị đã đọc, nơi dùng chưa).MonsterCountPerLevel/SpawnIntervalPerLevel— "level" là gì — UNKNOWN (consumer chưa đọc).- ~~Công thức
Tree_manager.GetStageHealth/GetStageMoney~~ — ĐÃ GIẢI (G395): seed 250 / 20, ×3 mỗi stage, cắt 2 chữ số có nghĩa. - Hệ text đang được khôi phục (G397 → G407): font đã kiểm giống hệt game gốc (18 font asset, 5 sprite asset, 27 material); lỗi là tài nguyên mẫu của package che asset gốc (đang xoá); cỡ chữ là dữ liệu scene; số bay sát thương/tiền đã hiện lại (G402). Chưa có claim nào về cỡ chữ cho tới khi xong.
- Bảng độ khó chế độ Play (
SpeedRun_managerkhông cóHealth_Balance) — UNKNOWN. - ~~
Adventure_Unlock_Balance[],Adventure_PetSlot_Unlock_Balance[]~~ — ĐÃ GIẢI:[0,1,3,6,10]/[0,2,7](runtime; Unlock + Duration còn xác nhận tĩnh, G353).SequenceLocked= nhận tuần tự (doc 11 §8.2);LuxuryLocked/VIPLocked— UNKNOWN. - ~~Bảng XP Trip nào sống sau khi nạp save~~ — ĐÃ GIẢI (G361): scene
10 … 920sống. - Relic: 15 icon, 3 lõi, 5 mẫu tác dụng, 300 cấp mỗi relic — số liệu (seed 105 ×1.05/cấp; bậc ×1/×1.5/×2; đơn lẻ tuyến tính) đã đọc, không cần thêm asset (doc 11 §4.3, G361).
- 2 hàng cuối
Fish_info_list(bậc 11 CriVal, bậc 12) — UNKNOWN (ngoài đoạn đã trích). - Tên hiển thị đã dịch của từng súng / pet / skin — UNKNOWN (term I2 chưa nối với index).
- Trigger reset Season; backend xác thực Redeem code — UNKNOWN (G149).
- Vì sao
Weapon_Get_Countschỉ 10 phần tử khi có 13 bậc — UNKNOWN (RVA0x2B0A720chưa đọc). - Hành vi
Monster.Freeze()/Barrier_Touched()— CHƯA dựng lại (doc 05 §5). - Có đường mở khoá Raid / 3 pet bậc Z nào ở runtime không — bằng chứng tĩnh: KHÔNG (G153, G161).
Đọc thêm
../framework/11-content-inventory.md— bảng kiểm kê đầy đủ (65 súng, 25 skin, 13 pet, 23 nhiệm vụ, 34 IAP…), §12 bảng tổng../framework/10-monetization-iaa-iap.md§6 — mỗi product id trao gì../framework/05-characters-pets-enemies.md— pet Spine, kẻ địch, wave../framework/04-sound.md—Sound_manager, chống trùng../framework/03-particles-vfx.md— pool hạt,FXThrottle../framework/06-juice-game-feel.md— text bay, thanh máu 2 tầng../framework/08-architecture-and-scale.md— atlas, texture, quy mô scene[liveops catalog: SCREEN_CATALOG.md]— cây màn hình, Raid ẩn[liveops catalog: UNLOCK_GATES.md]— 7 nút cóLocked_objgap list (nội bộ)— G012, G013, G014, G138a, G147, G149, G152, G153, G160, G161, G162, G163