CatGunner CookbookBardCat 1.1.59 · L1 ANALYSIS · tài liệu học
Trang chủ › 11 — Kiểm kê NỘI DUNG (content inventory) — cho hoạ sĩ ước lượng khối lượng công việc
Nguồn: 11-content-inventory.md · Cập nhật lần cuối: 2026-09-05 08:45 +07 · sha256 nguồn 6cd02a16cebb

11 — Kiểm kê NỘI DUNG (content inventory) — cho hoạ sĩ ước lượng khối lượng công việc

Nguồn: SOT com.Chodun.CatGunner 1.1.59 (tên nội bộ BardCat), build Android XAPK sha256 10ada66082387da2fd3ddcb35966f8daf9bf7f4170d7850c86833ac00ac0fbe6. Mọi C# ở đây là L1 ANALYSIS, không phải source gốc. Tài liệu này chỉ đếm và dẫn chứng. Nó KHÔNG ước lượng giờ công.

Đối tượng đọc: hoạ sĩ game của bạn. Mục tiêu: biết chính xác game đã ship có bao nhiêu thứ, mỗi thứ cần loại asset gì, để ước lượng công sức làm một game tương tự.


0. Nguồn & phương pháp (tái lập được)

Nguồn Đường dẫn Ghi chú
Scene SOT (đã giải mã) [export AssetRipper: Main.unity] 505,599,079 B · 142,626 object · KHÔNG BAO GIỜ mở cả file — chỉ awk/sed/grep theo dòng
Cây export asset .../ExportedProject/Assets/{Sprite,Texture2D,AudioClip,Font,TextAsset,Mesh,Material,AnimationClip,AnimatorController}
Metadata IL2CPP dump.cs (42 MB), stringliteral.json, game_types.csv khai báo field/enum, không phải access
Kiểm kê màn hình [liveops catalog: SCREEN_CATALOG.md], [liveops catalog: scene_canvas_tree.txt] tái dùng, không làm lại
Kiểm kê asset [report: asset_lane.md] tái dùng
Bằng chứng chạy thật [liveops catalog: PROBE_RESULT.md] + shots/*.png lane liveops, read-only; dùng để xác nhận/đính chính số đếm tĩnh

Ký hiệu mức bằng chứng: scene = đọc trực tiếp từ Main.unity (mạnh nhất cho nội dung); disasm = Hex-Rays tại RVA ghi rõ; metadata = dump.cs; asset = file trong cây export.

Ký hiệu trạng thái: SHIPPED = người chơi 1.1.59 chạm được · HIDDEN = có đủ code + asset trong build nhưng không có đường vào · R1-OUT = thuộc SDK ads/IAP/analytics, ghi nhận để hiểu nội dung nhưng không tích hợp (RULES §R1).


1. Nhân vật — mèo (Cat) + SKIN

1.1 Nhân vật

Mục Số lượng Bằng chứng Asset Trạng thái
Class nhân vật 1 (Cat, TypeDefIndex 8154, ~100 field) dump.cs:593002 – SHIPPED
Mèo trong màn 3 (Cat_manager.Cat_list) — [0] = người chơi, [1..2] = AI follower scene Main.unity:20324824 (fileID 118406) – SHIPPED
Tham số đàn (Cat_manager) FormationRadius 2.5 · SeparationRadius 1.8 · SeparationStrength 3 scene 20324828..20324830 – SHIPPED
Mèo preview trong UI 3 (Cat_Demo) scene, đếm instance dùng lại sprite skin SHIPPED
Component Cat trong scene 3 scene – SHIPPED
Animator mèo Cat.controller, Cat_UI.controller asset Assets/AnimatorController/ 2 controller SHIPPED
Clip mèo Idle, Idle_0, Walk, Walk_0, Walk_1, Attack, Death, Death_0, Spawn, Ready asset Assets/AnimationClip/ 10 .anim (trong tổng 21) SHIPPED

1.2 SKIN mèo — 25 skin

Skin_manager fileID 118440, scene dòng 20325750. Skin_list = 25 hàng; Skin_Unlock 25 bool; Price_Balance 25 int; Skin_Colors 25 màu; Skin_sprites 25; Skin_Bone_sprites 25; Skin_item_list 25.

Công thức chỉ số (đọc thẳng từ scene, tuyến tính theo index i): Damage = 16·i · Speed = 10·i · Money = 5·i · Price = 100·i (Dia).

# Damage Speed Money Price (Dia) Sprite thân Sprite "bone"
0 0 0 0 0 0_4 0_5
1 16 10 5 100 1_7 1_0
2 32 20 10 200 2_2 2_7
3 48 30 15 300 3_0 3_7
4 64 40 20 400 4_2 4_6
5 80 50 25 500 5_3 5_7
6 96 60 30 600 6_7 6_0
7 112 70 35 700 7_3 7_2
8 128 80 40 800 8_6 8_3
9 144 90 45 900 9_3 9_0
10 160 100 50 1000 10_4 10_2
11 176 110 55 1100 11_0 11_6
12 192 120 60 1200 12_7 12_5
13 208 130 65 1300 13_2 13
14 224 140 70 1400 14_3 14_2
15 240 150 75 1500 15_3 15
16 256 160 80 1600 16_0 16_1
17 272 170 85 1700 17_2 17_1
18 288 180 90 1800 18_3 18
19 304 190 95 1900 19_0 19_3
20 320 200 100 2000 20 20_1
21 336 210 105 2100 21 21_1
22 352 220 110 2200 22 22_1
23 368 230 115 2300 23_1 23
24 384 240 120 2400 24_1 24_0

Ghi chú cho hoạ sĩ: tên sprite trong build là số (0_4.asset, 12_7.asset…), không phải tên mô tả — đây là tên gốc do studio đặt, giữ nguyên. Mỗi skin = 2 sprite (thân + "bone"/nét) + 1 màu. ⇒ 50 sprite + 25 màu cho toàn bộ hệ skin.

Khối lượng skin: 25 skin × 2 sprite = 50 sprite, không có Spine, không có animation riêng (dùng chung Cat.controller).


2. PET

2.1 Bậc pet (Pet_manager.Pet_list) — 10 bậc SHIPPED / 13 bộ art

Pet_manager fileID 118377, scene dòng 20323954. Pet_list = 10 hàng · Pet_Collect 10 bool · Degree_Colors 13 · Pet_sprites 13. Kho pet: Owned_Pet_list 16 ô, Selected_items 3 ô (Pet_Slot_List 3).

Pet_manager.Balance_Reload (RVA 0x2B17E78) là DEAD CODE — xrefs_to chỉ có 1 data-xref (bảng con trỏ method IL2CPP), 0 code-xref ⇒ Pet_list cố định 10 hàng từ scene, không nạp từ server.

Nhãn bậc lấy từ Pet_Info_UI.Degree_objs (13 GameObject tên chính là nhãn): D, C, B, A, S, SS, SSS, X, XX, XXX, Z, ZZ, ZZZ.

Bậc Nhãn Spine skeleton Sprite UI Money (InfVal) MoveSpeed Trạng thái
0 D Slime 0_7 2.0 2 SHIPPED
1 C Slime2 1_6 6 4 SHIPPED
2 B Frog 2_10 18 8 SHIPPED
3 A Acorn 3_10 55 14 SHIPPED
4 S PinkRabbit 4_5 170 22 SHIPPED
5 SS BlackCat 5_8 520 32 SHIPPED
6 SSS Chicken 6_6 1 600 44 SHIPPED
7 X Pigeon 7_4 4 900 58 SHIPPED
8 XX Dove 8_8 15 000 74 SHIPPED
9 XXX Bee 9_5 46 000 92 SHIPPED
10 Z Griffin 10_0 — — HIDDEN
11 ZZ Ghost 11_7 — — HIDDEN
12 ZZZ PillowGhost 12_6 — — HIDDEN

PHÁT HIỆN MỚI (G194): ánh xạ 13 skeleton Spine → bậc pet đã được giải (doc 05 §5 còn ghi UNKNOWN). Bằng chứng: mỗi GameObject Pet có node con Skin (New) với 13 con tên 0..12, mỗi con mang SkeletonAnimation (spine-unity) trỏ đúng 1 <Name>_SkeletonData. Đối chiếu 286 tham chiếu skeletonDataAsset trong scene → mỗi skeleton xuất hiện đúng 22 lần, luôn dưới node tên <index>.

PHÁT HIỆN MỚI (G195): Griffin / Ghost / PillowGhost có đủ Spine JSON + atlas + PNG + sprite UI + màu bậc + node scene, nhưng không có hàng Pet_Info ⇒ 3 bậc pet cao nhất (Z/ZZ/ZZZ) là nội dung chưa phát hành, giống Raid. Art đã xong, gameplay chưa bật.

2.2 Asset Spine (13 bộ, đều spine 4.1.24)

Asset Số lượng Đường dẫn
SkeletonData JSON 13 Assets/TextAsset/{Acorn,Bee,BlackCat,Chicken,Dove,Frog,Ghost,Griffin,Pigeon,PillowGhost,PinkRabbit,Slime,Slime2}.json
Atlas .atlas.txt 13 cùng thư mục
Texture atlas PNG 13 Assets/Texture2D/<Name>.png
*_SkeletonData.asset / *_Atlas.asset 13 + 13 Assets/MonoBehaviour/
Mesh runtime Spine 13 (26 file có bản _0) Assets/Mesh/Skeleton Prefab Mesh "0..12"
Component SkeletonAnimation trong scene 286 = 13 × 22 scene, đếm skeletonDataAsset

Khối lượng pet: 13 bộ Spine (rig + atlas + PNG) + 13 sprite UI + 13 màu. Trong đó 10 bộ dùng được ngay, 3 bộ là art thừa/chưa bật.

2.3 UI pet

Panel Bằng chứng
Canvas/Pet_manager/PetInfo_UI (Pet_Info_UI, 34 obj) panel tree
Canvas/Pet_manager/Draw_Info_UI (35 obj) — gacha pet panel tree
Canvas/SafeArea/Pet_UI (SafeArea)/Pet_UI (565 obj) — lưới 16 ô + 3 ô đã chọn panel tree
NewPet_UI (24 obj) — popup pet mới panel tree
Pet_Item_List: Pet_Item_Pool 16, SlotTransforms 16 scene 20429362
Pet_Dummy (19) — pet hiển thị trong Adventure_RenderTexture_Map scene
Bậc pet có màu riêng (Pet_manager.Degree_Color_return RVA index thẳng vào Degree_Colors) — 13 màu serialize, 10 bậc dùng được (§2.1) scene + disasm
Ảnh tham chiếu panel Pet [liveops catalog: 31_panel_Pet.png]

3. SÚNG (Gun)

3.1 Bảng bậc

Gun_manager fileID 118035, scene dòng 20307967. Gun_list = 65 hàng · Gun_sprites 65 · Gun_Collect 65 bool · Degree_Colors 13 · Owned_Gun_list 16 ô · Selected_items/Gun_Slot_List 3 ô · Weapon_Get_Counts 10 int (header nói "10등급" — sai lệch, thực tế 13 bậc).

Bậc = GunNum / 5, 13 bậc × 5 súng. disasm-proven: Gun_manager.DrawRandomGun RVA 0x2B0A278 gọi Random.Range(5*Degree, 5*Degree+5). Gun_manager.Has_S_Grade_Gun RVA 0x2B0C09C quét Gun_Collect[20..24] ⇒ bậc 4 = "S". Nhãn 13 bậc lấy từ Gun_Info_UI.Degree_objs (scene 20420884..20420896): D, C, B, A, S, SS, SSS, X, XX, XXX, Z, ZZ, ZZZ.

AutoMerge_Exclude_Degree = 7 ⇒ tự-ghép không áp dụng cho bậc ≥ 7 (X trở lên). Tooltip tiếng Hàn trong dump.cs ghi "Z등급 이상" — tooltip sai/lỗi thời, code chặn từ bậc X. AutoMerge_Limit_Degree bị chặn cứng ≤ 6 (RVA 0x2B0ACE0).

Bảng súng "bậc cao" của Mission — Mission_manager.HighTier_Gun_Table = int[8] {16, 18, 20, 22, 24, 25, 27, 29} (static, .cctor 0x2A72888; blob metadata 0x9256C8, SHA-256 == tên field — G353). Đối chiếu Gun_list (§3.2):

GunNum Bậc Tên (nguyên bản) GunType
16 A 드럼 샷건 SHOTGUN
18 A 플라즈마 캐논 EXPLOSIVE
20 S 개틀링건 SINGLE
22 S 화염 캐논 EXPLOSIVE
24 S 전갈 미사일 MISSILE
25 SS 관통 SS PIERCE
27 SS 레이저 SS LASER
29 SS 폭발레이저 SS BLAST_SNIPER

Giá trị là metadata-proven; ánh xạ tên là derived từ scene; nơi dùng bảng này chưa đọc ⇒ ý nghĩa UNKNOWN (§13).

Súng thưởng StepUp (StepUp.Gun_Rewards {23, 28, 33, 39, 44}, blob SHA MATCH — G353), đối chiếu Gun_list: #23 유령 저격총 (S, LASER) ·

28 미사일 SS (SS, MISSILE) · #33 미사일 SSS (SSS, MISSILE) · #39 폭발레이저 X (X, BLAST_SNIPER) · #44 폭발레이저 XX (XX, BLAST_SNIPER)

— 5 bậc StepUp = 5 bậc súng tăng dần S → XX. Đóng UNKNOWN "tên súng StepUp" của doc 10 §10 (derived). Nền súng DailyGun GunNum_Base {20, 30, 35} = #20 개틀링건 (S) · #30 (SSS) · #35 (X) (blob SHA MATCH — G353).

3.2 65 khẩu súng — bảng đầy đủ

type: 0 SINGLE · 1 LASER · 2 PIERCE · 3 SHOTGUN · 4 EXPLOSIVE · 5 MISSILE · 6 BLAST_SNIPER. Damage là InfVal (s_digits×10^s_exponent); ở bảng dưới ghi giá trị thập phân.

# Bậc Tên (nguyên bản) GunType Damage AtkSpeed Sprite FX trúng
0 D 초보자 권총 SINGLE 100 0.6 0_10 0_Normal
1 D 소형 권총 SINGLE 80 0.5 1_4 0_Normal
2 D 경량 기관총 SINGLE 50 0.3 2_4 0_Normal
3 D 단축 샷건 SHOTGUN 80 1.0 3_6 0_Normal
4 D 쌍열 샷건 SHOTGUN 90 1.1 4_3 0_Normal
5 C 리볼버 SINGLE 200 0.6 5_10 1_Normal
6 C 돌격 기관총 SINGLE 100 0.3 6_3 1_Normal
7 C 펌프 샷건 SHOTGUN 240 1.1 7_6 1_Normal
8 C 사냥꾼의 소총 PIERCE 150 1.0 8_2 1_Laser
9 C 정찰 소총 PIERCE 110 0.7 9 1_Laser
10 B 체인건 SINGLE 165 0.25 10_6 2_Normal
11 B 미니건 SINGLE 200 0.3 11_2 2_Normal
12 B 전투 샷건 SHOTGUN 250 1.0 12_0 2_Normal
13 B 레일건 PIERCE 250 0.7 13_0 2_Laser
14 B 유탄 발사기 EXPLOSIVE 120 0.7 14_1 2_Fireball
15 A 중화기 벌칸 SINGLE 300 0.2 15_0 3_Normal
16 A 드럼 샷건 SHOTGUN 350 0.8 16 3_Normal
17 A 매그넘 라이플 PIERCE 500 0.6 17_3 3_Laser
18 A 플라즈마 캐논 EXPLOSIVE 300 0.7 18_2 3_Fireball
19 A 전술 저격총 LASER 200 1.0 19_1 3_Laser
20 S 개틀링건 SINGLE 500 0.05 20_0 4_Normal
21 S 포스 라이플 PIERCE 1 000 0.2 21_2 4_Laser
22 S 화염 캐논 EXPLOSIVE 800 0.3 22_0 4_Fireball
23 S 유령 저격총 LASER 400 0.4 23_0 4_Laser
24 S 전갈 미사일 MISSILE 600 0.4 24_2 4_Missile
25 SS 관통 SS PIERCE 6 000 0.2 25 5_Laser
26 SS 폭발 SS EXPLOSIVE 2 800 0.3 26 5_Fireball
27 SS 레이저 SS LASER 1 400 0.3 27 5_Laser
28 SS 미사일 SS MISSILE 1 600 0.35 28 5_Missile
29 SS 폭발레이저 SS BLAST_SNIPER 1 600 0.35 29_0 5_Rocket
30 SSS 관통 SSS PIERCE 24 000 0.1 30_0 6_Laser
31 SSS 폭발 SSS EXPLOSIVE 11 200 0.15 31 6_Fireball
32 SSS 레이저 SSS LASER 5 600 0.15 32_0 6_Laser
33 SSS 미사일 SSS MISSILE 6 400 0.2 33 6_Missile
34 SSS 폭발레이저 SSS BLAST_SNIPER 6 400 0.2 34_0 6_Rocket
35 X 관통 X PIERCE 90 000 0.05 35 7_Laser
36 X 폭발 X EXPLOSIVE 42 000 0.07 36 7_Fireball
37 X 레이저 X LASER 21 000 0.07 37 7_Laser
38 X 미사일 X MISSILE 24 000 0.1 38 7_Missile
39 X 폭발레이저 X BLAST_SNIPER 24 000 0.1 39 7_Rocket
40 XX 관통 XX PIERCE 360 000 0.05 40 8_Laser
41 XX 폭발 XX EXPLOSIVE 168 000 0.07 41 8_Fireball
42 XX 레이저 XX LASER 84 000 0.07 42 8_Laser
43 XX 미사일 XX MISSILE 96 000 0.1 43 8_Missile
44 XX 폭발레이저 XX BLAST_SNIPER 96 000 0.1 44 8_Rocket
45 XXX 관통 XXX PIERCE 1 350 000 0.05 45 9_Laser
46 XXX 폭발 XXX EXPLOSIVE 630 000 0.07 46 9_Fireball
47 XXX 레이저 XXX LASER 315 000 0.07 47 9_Laser
48 XXX 미사일 XXX MISSILE 360 000 0.1 48 9_Missile
49 XXX 폭발레이저 XXX BLAST_SNIPER 360 000 0.1 49 9_Rocket
50 Z 관통 Z PIERCE 15 000 000 0.05 50 10_Laser
51 Z 폭발 Z EXPLOSIVE 7 000 000 0.07 51 10_Fireball
52 Z 레이저 Z LASER 3 500 000 0.07 52 10_Laser
53 Z 미사일 Z MISSILE 4 000 000 0.1 53 10_Missile
54 Z 폭발레이저 Z BLAST_SNIPER 4 000 000 0.1 54 10_Rocket
55 ZZ 관통 ZZ PIERCE 300 000 000 0.05 55 11_Laser
56 ZZ 폭발 ZZ EXPLOSIVE 140 000 000 0.07 56 11_Fireball
57 ZZ 레이저 ZZ LASER 70 000 000 0.07 57 11_Laser
58 ZZ 미사일 ZZ MISSILE 80 000 000 0.1 58 11_Missile
59 ZZ 폭발레이저 ZZ BLAST_SNIPER 80 000 000 0.1 59 11_Rocket
60 ZZZ 관통 ZZZ PIERCE 7 500 000 000 0.05 60 12_Laser
61 ZZZ 폭발 ZZZ EXPLOSIVE 3 500 000 000 0.07 61 12_Fireball
62 ZZZ 레이저 ZZZ LASER 1 750 000 000 0.07 62 12_Laser
63 ZZZ 미사일 ZZZ MISSILE 2 000 000 000 0.1 63 12_Missile
64 ZZZ 폭발레이저 ZZZ BLAST_SNIPER 2 000 000 000 0.1 64 12_Rocket

Tham số phụ theo GunType (mặc định giống nhau trừ khi ghi rõ): ShotgunPelletCount 2 (súng #12, #16 = 3) · ShotgunSpreadAngle 20 (SHOTGUN = 10) · ExplosionRadius 3 → 5 / 5.5 / 6 / 6.5 / 7 / 9 theo bậc EXPLOSIVE · MissileExplosionRadius 5 → 9 / 10 / 11 / 13 theo bậc MISSILE · MissileSpeed 35 hoặc 50 · MissileElevationMin/Max 1 / 3 · BlastSniperExplosionRadius 3 → 5.5 / 6.5 / 8 · PenetratingBulletLifetime 2 (mọi khẩu).

CẢNH BÁO nguồn: Gun_manager chứa const URL Google Sheet …/export?format=tsv&range=A2:I66 (65 hàng × 9 cột — đúng bằng kích thước Gun_list). Nhưng Gun_manager.Balance_Reload (RVA 0x2B0AB4C) là DEAD CODE (G144) ⇒ bảng súng thực tế đọc từ scene, không phải từ sheet. Bảng trên là bảng ship thật.

3.3 7 GunType + đạn/FX

enum GunType (TypeDefIndex 8226, dump.cs:596519): SINGLE=0, LASER=1, PIERCE=2, SHOTGUN=3, EXPLOSIVE=4, MISSILE=5, BLAST_SNIPER=6.

GunType Số khẩu Handler va chạm Họ FX trúng
SINGLE 8 HitSingle Normal
SHOTGUN 5 HitSingle (tán ở phía bắn) Normal
PIERCE 13 HitPierce Laser
LASER 13 HitLaser Laser
EXPLOSIVE 12 HitExplosive Fireball
MISSILE 10 HitExplosive + bay parabol Missile
BLAST_SNIPER 8 HitBlastSniper Rocket
Tổng 65

3.4 Đạn, FX nòng, FX trúng — KHỐI LƯỢNG VFX LỚN NHẤT CỦA GAME

Mục Số lượng Bằng chứng
Pool Bullet 27 GameObject Bullet (n) Polling_manager.Polling_List[0].Objects = 27, scene 20317279
Bullet.Skin_particles 65 (1 slot / khẩu) scene 20794906
Pool Bullet_FX 10 GameObject Polling_List[1].Objects = 10
Bullet_FX.Skin_particles 65 (1 slot / khẩu) scene 20808833
Biến thể FX trúng riêng biệt 45 45 GameObject con của Bullet_FX, tên <bậc>_<họ>
Bullet_Mesh (mesh đạn) 1 215 instance scene, đếm component
Gun (vật thể súng cầm tay, có Shoot_particle = muzzle) 345 instance; 65 slot / Cat.Gun_list scene, Cat fileID @20912670
ParticleSystem tên Muzzle 345 đếm từ scene

45 biến thể FX trúng (phủ theo bậc, không phải bậc nào cũng có đủ 5 họ):

Họ Bậc có FX Số biến thể
Normal 0–4 5
Laser 1–12 12
Fireball 2–12 11
Missile 4–12 9
Rocket 5–12 8
Tổng 45

Mỗi biến thể FX là 1 prefab-node có nhiều ParticleSystem con (Glow, Ring, Trail, SparkTrail, SemiCircles, SmokeTrail, InnerRing, WhiteGlobe, Mesh, Beam, CloudBurst, Nova, Sphere, FireBall, SmokeClouds, GlowFlare, Center, Circle…). ⇒ Đây là lý do scene có 7 718 ParticleSystem (§11).

3.5 UI súng

Panel / thành phần Số Bằng chứng
Canvas/Gun_manager/GunCollection_UI 1 702 obj, Gun_Item_Collection 65 panel tree + đếm instance
Canvas/Gun_manager/GunInfo_UI (Gun_Info_UI) 33 obj, Degree_objs 13 scene 20420869
Canvas/Gun_manager/Draw_Info_UI (gacha) 35 obj panel tree
Canvas/SafeArea/Gun_UI (SafeArea)/GunList_UI 669 obj panel tree
Gun_Item_List: Gun_Item_Pool 16, SlotTransforms 16 16 ô kho scene 20637063
NewGun_UI, Gun_Merge_Tutorial 1 + 1 panel tree

3.6 Súng thưởng quảng cáo — R1-OUT

Gun_manager: AD_Gun_SlotIndex, AD_Gun_Num, AD_Gun_EndUtcTicks, AD_GUN_EVENT_GUN_NUM = 14 (tức súng #14 유탄 발사기, EXPLOSIVE bậc B), AD_GUN_EVENT_COOLTIME = 1800 s. Bật/tắt bằng cờ remote weapon_02_ad_onoff (ServerConfig, 15 field). Method: AddAdRewardGun, AdRewardGun_TryWatch/Acquire/Expire, CheckAdGunEvent. Trạng thái: R1-OUT — cơ chế được ghi nhận, SDK ads không tích hợp.


4. BOOSTER / BUFF / RELIC / UPGRADE

4.1 AD_Type — 10 vị trí thưởng quảng cáo (R1-OUT)

dump.cs:584959. Mỗi giá trị = một chỗ game mời xem quảng cáo lấy thưởng.

# AD_Type Gate cái gì
0 Money_Buff buff tiền ×3
1 Power_Buff buff sát thương ×3
2 SpeedRun_Bonus thưởng thêm chế độ Play
3 Mine_Bonus thưởng thêm Mine
4 Boss_Bonus thưởng thêm Boss
5 Monster_Bonus thưởng thêm Hunt
6 Mission_Reward thưởng nhiệm vụ
7 Fish_Gacha quay cá miễn phí
8 Upgrade_Rebirth rebirth cường hoá ×3
9 AD_Reward_Gun súng thưởng quảng cáo (§3.6)

4.2 Buff

Mục Giá trị Bằng chứng
Số nút buff 2 (PowerBuff_Btn, MoneyBuff_Btn, class Buff_Btn) scene Buff_manager.Buff_Btn_list = 2 @20339104
BUFF_DURATION 300 s / lần dump.cs:592886
BUFF_MAX 900 s trần dump.cs:592886
Buff vĩnh viễn IsPermanentBuff (mua IAP) metadata
Panel Canvas/Buff_manager/Buff_UI 60 obj; Buff_Panel ×2 panel tree
Icon HUD On_obj / Off_obj mỗi nút scene Btn_list

4.3 Relic — 15 relic (Relic_manager, scene 20345666)

3 loại lõi (Core_Type: Forest=0, Desert=1, Tundra=2, ALL=3) × 5 relic. Bảng nâng cấp: Damage_Balance / Money_Balance / CriDmg_Balance mỗi mảng 300 phần tử ⇒ cấp tối đa 300. DrawPrice = 20. Relic_Item_List 15 UI item.

# Relic_Type Lõi Tác dụng
0 Dmg_0 Forest sát thương
1 Dmg_1 Forest sát thương
2 Dmg_2 Forest sát thương
3 Rebirth (11) Forest hệ số thưởng rebirth
4 Skip (12) Forest bỏ qua màn
5 Money_0 (3) Desert tiền
6 Money_1 (4) Desert tiền
7 Money_2 (5) Desert tiền
8 Offline (10) Desert thu nhập offline
9 Skip (12) Desert bỏ qua màn
10 CriDmg_0 (6) Tundra chí mạng
11 CriDmg_1 (7) Tundra chí mạng
12 CriDmg_2 (8) Tundra chí mạng
13 MoveSpeed (9) Tundra tốc chạy
14 Skip (12) Tundra bỏ qua màn

Static tích luỹ: Dmg_Value, Money_Value, CriDmg_Value (InfVal), MoveSpeed_Value, Offline_Value, Rebirth_Value, Skip_Value (int).

Bảng giá trị relic (đợt 4, disasm-proven — G360/G361): Balance_Reload (0x2ADFE20) xây một đường cong InfVal[300] seed 105, arr[i] = ToPrecision(arr[i-1] × 1.05, 3) − 100, dùng chung cho Damage / Money / CriDmg (⇒ 300 cấp mỗi relic, khớp 3 mảng 300 phần tử). Value_Reload (0x2ADF8F0): baseline Dmg/Money/CriDmg = 100, Rebirth = 100, MoveSpeed/Offline/Skip = 0; bậc _0 / _1 / _2 cùng loại = đường cong ×1 / ×1.5 (bỏ thập phân) / ×2; relic đơn lẻ tuyến tính: MoveSpeed & Skip = 2·Lv+2, Offline = 10·Lv+10 (phút), Rebirth = 5·Lv+5. ⇒ Cho artist: 15 icon relic, 3 lõi, 5 mẫu tác dụng — số liệu không cần thêm asset. Panel: Relic_Info_UI (33 obj), Relic_Draw_Popup (196 obj), Relic_DownPanel, Draw_Relic_Btn ×2, Relic_DrawMode_Btn ×4, Relic_Item_Demo ×27.

4.4 Upgrade thường — 3 dòng

Upgrade_manager scene 20353393. Upgrade_list = 3: Power, Speed, Money. Upgrade_Anim_objs 3. MaxLv = 10000. Bảng serialize trong scene: Price_balance 10 001 · Power_balance 10 001 · Money_balance 10 001 · Speed_balance 10 001 int. (Xem doc 01/09 cho công thức; G138a: các bảng này là iterated truncation, không phải 1.08^lv.)

4.5 Upgrade rebirth — 3 dòng

Rebirth_manager scene 20451280. Upgrade_list = 3: Power (@20451293), Speed (@20491302), Money (@20531311); mỗi dòng có MaxLv 20000 + Value_balance riêng. Price_balance 20 001 (@20571320). Panel: RubyUpgrade_UI (81 obj), Rebirth_Popup_UI, Rebirth_Popup_UI (AD), Rebirth_Popup_UI (IAP), Rebirth_FX (11 obj), Rebirth_Upgrade_Item ×3.

Phần tử UI đếm được trên panel chạy thật ([liveops catalog: 31_panel_Rebirth.png]): 3 thẻ nâng cấp (Power Increase / Speed Increase / Money Increase, mỗi thẻ Lv.0 +0%, giá 3 Ruby) · 1 icon tiền tệ Ruby · 1 ô "Phần thưởng khả dụng" · 1 nút Rebirth · 1 khối "Super Rebirth! ×3" kèm nút quảng cáo 1/1. ⇒ art cần: 1 icon Ruby + 3 icon nâng cấp + 1 badge ×3 + nền panel.

4.6 Các gói/booster liveops (lịch cố định trong binary, xem [liveops catalog: LIVEOPS_SURFACE.md] §6)

Hệ Số item Panel (obj) Trạng thái
StepUp 5 bậc, 7 ngày Shop_manager/StepUp 208 SHIPPED (IAP = R1-OUT)
DailyGun 3 sản phẩm, xoay theo tuần Shop_manager/DailyGun 124 SHIPPED
WeeklyShop / VIP 4 vị trí (hud, auto_weapon, auto_pet, auto_fish) Shop_manager/WeeklyShop 226 SHIPPED
PlusPack 3 loại (auto/reward/time), 7 ngày Shop_manager/PlusPack SHIPPED
DiaPig tick 60 s Shop_manager/DiaPig 57 SHIPPED
DailyCheck 7 phần thưởng, Dia 70,200,400,600,800,1000,1500 SafeArea/DailyCheck 127 SHIPPED
OfferWall (Tapjoy) remote-gated Shop_manager/OfferWall R1-OUT
FreeCash (Almedia) remote-gated Canvas/FreeCash_manager 29 R1-OUT
AutoUpgrade_UI nút Auto Shop_manager/AutoUpgrade_UI 32 SHIPPED

5. KẺ ĐỊCH (Enemy)

5.1 Enemy.Type — 6 loại

dump.cs:595437: Tree=0, Tree_SpeedRun=1, BossMonster=2, Monster=3, Ore=4, RaidBoss=5. Class chung Enemy (Health_Now/Max, Money, Enemy_Slider, Bounce_Custom) — 1 933 instance trong scene.

Loại Class Instance trong scene Sprite Trạng thái
0 Tree Tree 501 (5 Tree_Grid × 100 + Boss_tree 1) 40 (§5.2) SHIPPED
1 Tree_SpeedRun Tree_SpeedRun 190 (SpeedRun_manager.Tree_list) dùng lại Tree_sprites SHIPPED
2 BossMonster Boss 1 (9 skin) 9×3 head (§5.4) SHIPPED
3 Monster Monster 240 (NonSpawned_Monster) 20 (§5.3) SHIPPED
4 Ore Ore 1 000 (Mine_manager.Ore_list) 2 (0_2, 1_dia) SHIPPED
5 RaidBoss Raid_Boss 1 (5 skin) 5 texture worm HIDDEN

5.2 Cây (Tree) — 4 bậc × 10 chủ đề map = 40 sprite

Tree_manager fileID 119647, scene dòng 20614875. Tree_sprites = 40 (0_9, 1_10, 2_5, 3_5, 4_0, 5_9, 6_1, 7_8, 8_5, 9_1, 10_5, 11, 12_1, 13_1, 14_0, 15_1, 16_2, 17_0, 18_0, 19_2, 20_2, 21_0, 22_2, 23_2, 24, 25_0, 26_0, 27_0, 28_0, 29, 30, 31_0, 32, 33_0, 34, 35_0, 36_0, 37_0, 38_0, 39_0).

Bậc cây = 4 — disasm-proven tại Tree_manager..cctor RVA 0x2B46094: - Degree_Health_Balance = { 1, 1.8, 3, 35 } - Degree_Money_Balance = { 1, 1.8, 3, 100 }

Đây là giải một UNKNOWN của doc 05 §5 (trước ghi "công thức chưa biết"): bản thân hai mảng hệ số nay đã đọc được từ .cctor. Công thức stage cũng đã đọc (G395): Balance_Reload xây Stage_Health_Balance / Stage_Money_Balance từ seed 250 / 20, mỗi stage ×3 cắt về 2 chữ số có nghĩa — mảng scene 5 000 mục khớp (250, 750, 2200, 6600, 19000…).

Tree_Grid.degreeRates là float[5,4] — 5 level/stage × 4 bậc cây, kích thước đọc từ xmmword_105CBF0 = [5,4] (Tree_Grid..cctor RVA 0x2B44288). Bốc bậc bằng Degree_Random_return(Level) = roulette 0..100 trên hàng Level (RVA 0x2B440D8).

Giá trị 20 float — ĐÃ ĐỌC (G353 / G701, blob metadata 0x92ABF8, SHA-256 == tên field, hàng-chính):

Level bậc 0 bậc 1 bậc 2 bậc 3
0 80 % 20 % 0 0
1 50 % 45 % 5 % 0
2 20 % 55 % 25 % 0
3 5 % 35 % 60 % 0
4 0 15 % 85 % 0

Mỗi hàng cộng đúng 100. Cột bậc 3 (hệ số ×35 máu / ×100 tiền) luôn 0 ⇒ cây bậc cao nhất không bao giờ được bốc ngẫu nhiên từ lưới — nó chỉ có thể là Boss_tree (1 instance riêng). Cùng blob khởi tạo OfflineProgressSimulator.DegreeRates nên mô phỏng offline dùng đúng phân bố này. Đóng G199. Thêm hai bảng Monster_manager (G353): MonsterCountPerLevel {90, 120, 160, 200, 240}, SpawnIntervalPerLevel {0.35, 0.2, 0.17, 0.12, 0.08} s — chỉ số hàng chưa đọc (§13).

5.3 Quái (Monster / chế độ Hunt) — 20 sprite, 10 màu

Monster_manager fileID @scene 20297237. Monster_sprites 20 (0_3,1_8,2_8,3_3,4_9,5_1,6_4, 7_5,8_7,9_7,10_7,11_1,12,13_3,14,15_2,16_3,17,18_1,19), Monster_Colors 10, Health_Balance 2 000 wave, pool NonSpawned_Monster 240.

Chọn sprite — disasm-proven Monster_manager.SkinSprite_return RVA 0x2AFB480: index = (Wave_Now % 10) * 2 + (is_boss ? 1 : 0) Chọn màu — MonsterColor_return RVA 0x2AF9250: Monster_Colors[Wave_Now % 10]. ⇒ 10 chủ đề wave × 2 biến thể (thường / quái-boss) = 20 sprite. Cả 20 đều dùng.

Monster không có Animator — chuyển động/nhấp nháy bằng MaterialPropertyBlock (ID_TimeOffset, ID_AnimSpeed, ID_ScaleAmount), 2 cỡ Size_Big / Size_Small.

5.4 Boss — 9 con rồng

Boss_manager scene 20443894: Boss_Head_sprites 9, Boss_Head_Die_sprites 9, Boss_Head_Idle_sprites 9 ⇒ 27 sprite đầu (3 trạng thái × 9 boss). Health_Balance 1 000 stage. SweepEfficiencyPct = 70.

Boss.Skin_obj = 9 GameObject (scene 20655096..20655104): BlackDragon, EmeraldDragon, GoldenDragon, GreenDragon, GreyDragon, IceDragon, MechanicalDragon, PurpleDragon, RedDragon. Texture: Assets/Texture2D/<Name>.png — 9 sheet 2048×1024, ASTC 8×8 (asset_lane §0). Boss có Animator (khác Monster/Pet).

5.5 Raid Boss — HIDDEN (chưa phát hành)

Raid_Boss.Skin_obj = 5 (scene 21128970..21128974): GreenWorm, IceWorm, MechanicalWormTypeB, MosquitoWorm, VolcanoWorm. Texture tương ứng có mặt trong Assets/Texture2D/ (5 file) + Raid.png. Raid_manager (root m_IsActive: 0): BossCount = 5, GameTime_Max = 30, BossReward_Value = 10, Gun_List/Gun_Index_List 3 ô. Mọi mảng serialize đều RỖNG trong scene (Health_Balance: [], Slot_list: [], gunSelect_panel: {fileID: 0}) ⇒ chế độ chưa được cân bằng/nối dây. UI thì đủ: Canvas/Contents_UI/Raid_UI 690 obj (Raid_Start_UI 134, Raid_GunSelect_Popup 501, GameEnd_obj 54) + Canvas/SafeArea/Raid_UI 19 obj.

Xác nhận CHẠY THẬT 2 lần: quét Stage_Value_Max lên 1000 (mở toàn bộ 7 cổng) ở cả ⇒ Raid là nội dung chưa phát hành, đã được chứng minh cả tĩnh lẫn động. Xem G153, G177.

Giá trị ước lượng cho hoạ sĩ: nếu làm chế độ tương tự thì phần UI đã có sẵn quy mô tham chiếu — 690 GameObject UI + 5 skin boss (5 texture) + Raid.png. Đây là "chi phí một chế độ chơi" đo thật.

Luật đã đọc (G406, doc 07 §2.12): 5 boss = 5 tuần xoay vòng (tuần kể từ 2024-01-01 mod 5) ⇒ mỗi worm là "boss của tuần"; mỗi tuần một loại súng được buff (EXPLOSIVE / LASER / MISSILE / BLAST_SNIPER / PIERCE) ⇒ hoạ sĩ cần icon/badge cho 5 loại súng buff; loadout 3 ô; màn 30 s; boss hồi sinh sau mỗi lần giết. Art cần: 5 worm + 5 badge súng + panel chọn súng (501 obj đã có).

5.6 Thanh máu & phụ trợ kẻ địch

Component Instance Vai trò
Enemy 1 933 thân chung
EnemyColl 1 933 collider chuyển tiếp
Enemy_Slider 1 931 thanh máu (2 tầng, xem doc 06)
SpriteFill 1 931 tô thân địch khi trúng
Bounce_Custom 1 939 squash-stretch khi trúng
SlicedFilledImage 93 thanh UI (không phải máu địch)

6. STAGE / MAP / BACKGROUND

6.1 Stage chính (chặt cây)

Mục Giá trị Bằng chứng
Stage tiền-tính 5 000 (PrecomputedStageCount) dump.cs:602135; scene Stage_Health_Balance / Stage_Money_Balance mỗi mảng 5 000
Level / stage 5 (Level_Now 0..4) Tree_manager.StageAdvance RVA 0x2B45820; degreeRates [5,4]
Hiển thị "Stage {Stage+1}-{Lv+1}" GameSlider.Stage_Reload RVA 0x2B156E4
Chủ đề map 10 Ground_sprite_list 10 (scene 20634957)
Sprite nền đất 10 (0_6, 1_1, 2_0, 3_4, 4_8, 5_4, 6g, 7g, 8_1, 9g) scene
Map_Grid 12 ô lưới map scene Map_Grid_list @20634943
Mỗi Map_Grid Border_Up_sprite_list 10 · Border_Down_sprite_list 10 · Upper_sprite_Color_list 10 scene 20825393
Sprite cây 40 = 10 chủ đề × 4 bậc scene 20614886
Tree_Grid 5, mỗi cái 100 Tree scene

⇒ Bộ art 1 map = 1 nền đất + 1 border trên + 1 border dưới + 1 màu upper + 4 sprite cây. 10 map × 7 asset = 70 asset cho toàn bộ stage chính.

6.2 Các chế độ khác

Chế độ Nút HUD Bảng độ khó Map / pool Panel (obj) Trạng thái
Main (chặt cây) – 5 000 stage 10 map, 501 Tree Main_UI 199 SHIPPED
Play (SpeedRun) SpeedRun_Btn clamp(15·Stage + 20, 20, 190) cây × bậc 1 / 1.8 / 3 trên đường cong stage; 60 s; thưởng 30 dia (×4 auto) — G406 vòng tròn (ring, bán kính scene 22 / 70), 190 Tree_SpeedRun, map = Ground_sprite_list[Stage % 10] Contents_UI/SpeedRun_UI 301 SHIPPED
Mine Mine_Btn – (điểm = Dia) 1 000 Ore, 2 sprite quặng, Perlin noise (noiseScale 0.085, noiseThreshold 0.517) Contents_UI/Mine_UI 235 SHIPPED
Hunt (Monster) Monster_Btn 2 000 wave; mỗi wave 5 level, giết 90/120/160/200/240 con, spawn mỗi 0.35/0.2/0.17/0.12/0.08 s; máu wave 500 → 1 500 → 4 500 (×3); quái to (xác suất Lv × 0.2) máu ×3; rào HP = 1 (một lần xuyên = thua); thưởng 30 PetCoin/level — G408 20 sprite, 10 màu, 240 pool; spawn theo ellipse xoay 45° Contents_UI/Monster_UI 253 SHIPPED
Boss Boss_Btn 1 000 stage; máu 50 000 → 250 000 → 1.2 M (×5); 60 s; thưởng 150 dia — G408 9 rồng × 3 sprite đầu, skin = Stage % 9 (xoay 9 rồng) Contents_UI/Boss_UI 304 SHIPPED
Trip (Adventure) Adventure_Btn Exp_balance 15 cấp 3 bối cảnh map (Forest/Desert/Glacier), 5 bậc mở, 3 slot pet Adventure_manager 955 + Adventure_UI (SafeArea) 573 SHIPPED
Fish Fish_Btn 13 bậc cá bể 20 ô (Fish_item 0..19) Fish_manager 110 + Fish_UI 190 SHIPPED
Raid (không có nút) rỗng trong scene; code: boss của tuần = tuần kể từ 2024-01-01 mod 5 (vd 2026-09-05 = tuần 139 → index 4, BLAST_SNIPER), 30 s, súng buff theo tuần, 3 ô loadout tối thiểu 2, 10 dia (20 auto); boss raid không rơi tiền (Spawn(Health, 0)) — G406, G412 5 worm xoay theo tuần Contents_UI/Raid_UI 690 HIDDEN

Stage mở từng chế độ (cho hoạ sĩ lên lịch content — đọc từ 7 handler Content_Btn_*, G395): Stage_Value_Max đếm 10 mỗi stage, ngưỡng là bội của 10 ⇒ mở ở level 1 của stage hiển thị:

Chế độ Ngưỡng Stage_Value_Max Mở ở stage hiển thị Ghi chú cho hoạ sĩ
Rebirth 20 3-1 panel prestige phải sẵn sàng rất sớm
Mine 30 4-1 màn 60 s, quặng trong vành r 8..20 (nhiễu Perlin), chỉ 100 quặng đầu có sprite dia (quirk SOT)
Fish 50 6-1 13 bậc cá, bể 20 ô
Boss 90 10-1 9 rồng
Pet 110 12-1 13 Spine
Hunt (Monster) 110 12-1 20 sprite quái, 10 màu
Trip (Adventure) 340 35-1 3 bối cảnh map

Chưa đủ ⇒ alert bản địa hoá "mở ở stage N" qua UI_manager.Alert (round-robin 3 Alert). Máu/tiền cây theo stage: seed 250 / 20, ×3 mỗi stage cắt 2 chữ số (§5.2, G395). Chủ đề map = Stage_Now % 10 (10 chủ đề lặp mỗi 10 stage — stage 2 là candy, G406); Play dùng lại cùng bảng.

6.3 Trip / Adventure — 3 bối cảnh map, 5 bậc mở, 4 tiền tệ

Cho hoạ sĩ, con số quan trọng nhất là 3 — không phải 15. Panel Trip chạy thật ([liveops catalog: 31_panel_Trip.png], mở bằng Tree_manager.Content_Btn_* sau khi đặt Stage_Value_Max = 1000) hiển thị đúng 3 map, mỗi map một bối cảnh art riêng và một loại Core riêng:

Map (tên UI) Tên trong code Core "Ngày mở" (xoay theo THỨ)
Forest Forest xanh lá T2, T5, CN
Desert Desert cam T3, T6, CN
Glacier Tundra ⚠ xanh dương T4, T7, CN

⚠ Bẫy đặt tên: vùng thứ 3 tên Tundra trong code (Core_Type.Tundra, Map_list[2].Name) nhưng hiển thị là "Glacier" trong UI. Hoạ sĩ đặt tên file theo UI sẽ lệch với code.

Lớp gate thứ 2 — LỊCH THỨ TRONG TUẦN — hoàn toàn không thấy được bằng phân tích tĩnh; chỉ lộ ra khi chạy thật. Nghĩa là art của 1 map chỉ dùng được 3 ngày/tuần ⇒ luân phiên nội dung mà không cần thêm asset. Xem G191.

Số liệu (kết hợp scene + đọc bộ nhớ thật):

Mục Giá trị Nguồn
Map_list 3 nhóm (Forest, Desert, Tundra) scene 20323787
Map_info_list mỗi nhóm 5 bản ghi { is_Enter, Enter_dateTime } scene
Adventure_PetSlot_Unlock_Balance [0, 2, 7] — 3 slot pet, mở ở Trip Lv 0 / 2 / 7 runtime
Adventure_Duration_Balance [1, 2, 4, 8, 16] giờ — 5 lựa chọn thời lượng chuyến đi. Xác nhận tĩnh: blob .ctor 0x2ADD07C, SHA MATCH (G353) runtime + metadata (blob)
Exp_balance 15 bậc: 10,60,100,130,180,230,280,340,400,470,550,630,720,820,920 — bảng SỐNG (scene lưu dạng hex blob dòng 20323823 + bộ nhớ runtime khớp). Exp_Balance_Reload (0x2ADAABC, sinh 50,73,…,918) chỉ là fallback khi mảng null/rỗng (G361, đóng G901) scene-YAML (hex blob) + runtime + disasm
MaxLv 15 metadata
Vé Ticket_Max = 20 (quan sát 20/20), nạp 1 vé / 4 h — tĩnh: Ticket_Charge_Interval = TimeSpan.FromHours(4) (RVA 0x2ADAC44); Ticket_Refresh: dưới trần mốc nạp tiến theo số khoảng nguyên, dư mang sang; tại trần mốc đặt về NOW, dư bỏ (G321) scene + runtime + disasm
Tiền tệ Trip 4 icon: Core xanh lá / cam / xanh dương + PrismCore (sao tím) — khớp Currency_Core 4 int + Core_sprites 4 scene + 31_panel_Trip.png
Tab 2: Trip / Ability 31_panel_Trip.png
Banner promo "Mọi Ability đều có thể upgrade!" + nút Mua → PrismCore_Purchase_popup 31_panel_Trip.png

Thưởng: Adventure_Reward_Core_perHour = 20 · Adventure_Reward_Exp_perHour = 10 · Adventure_Reward_Core_PetDegree = 0.1 · PlusPack_Auto_Reduce_Hours = 16.

Panel con: Adventure_Enter_Popup 131 · Adventure_Reward_UI 23 · Adventure_PetSelect_Popup 463 · Adventure_Map_Popup 222 · PrismCore_Purchase_popup 94 · AdventureExit_panel 21 · Adventure_Panel 572. Adventure_RenderTexture_Map (A=0) chứa 19 Pet_Dummy (pet render vào RenderTexture để hiện trên map).

KHÔNG khẳng định "15 map". Scene có 3 × 5 = 15 bản ghi Adventure_Map_Info, nhưng bản chạy thật chỉ vẽ 3 map. Chưa xác định 5 bản ghi/vùng là 5 slot chuyến đi hay 5 map con. Cách chốt: xem §13.

6.4 Fish — 13 bậc, bể 20 ô

Fish_manager scene 20930271. MAX_FISH = 20, MAX_GRADE = 12 (⇒ 13 bậc D..ZZZ), FreeGacha_MaxCount = 5, FreeGacha_NoAdCount = 3, PremiumGachaCost = 200 Dia, GachaChances = [60, 30, 10, 0] (scene; mặc định .ctor 0x2B01D08 là {40, 30, 20, 10} — G353 — nhưng field serialize nên scene thắng lúc chạy; 4 phần tử = 4 bậc gacha). Bể cá khi nạp save (Fish_Tank.ReloadAll, G327): tank ẩn ⇒ hoãn (_pendingReload); refill ≤ min(Inventory, pool 20); text "{0}<size=25>/{1}" với trần 20; rồi auto-merge chain. Fish_info_list 13 · Fish_sprites 13 · Fish_Real_sprites 13 · Fish_Outline_sprites 13 ⇒ 39 sprite cá. Fish_Tank.fishPool 20. Fish_Item component 20.

Bậc Damage CriPer CriVal
0 4 1 8
1 12 2 20
2 36 6 50
3 110 16 120
4 320 39 310
5 970 98 780
6 2 900 100 2 000
7 8 700 100 4 900
8 26 000 100 12 000
9 79 000 100 31 000
10 240 000 100 76 000
11 710 000 100 UNKNOWN¹
12 UNKNOWN¹ UNKNOWN¹ UNKNOWN¹

¹ hai hàng cuối nằm ngoài đoạn đã trích; lấy bằng sed -n '20930340,20930360p' Main.unity.


7. MÀN HÌNH / PANEL UI

Đơn vị đếm: con của Canvas, Canvas/SafeArea, Canvas/Contents_UI (không đếm Canvas component — xem đính chính G152: chỉ 1 Canvas UI thật, 20 cái còn lại là Canvas lồng để override sorting cho Fish_item (0..19)).

Chỉ số Giá trị Bằng chứng
Nhánh gốc dưới Canvas 18 cây scene
Panel cấp 1 78 cây scene
Panel/nhóm cấp 2 73 cây scene
Định danh script duy nhất (fileID+guid) 221 grep -o 'm_Script: {fileID: …, guid: …}' \| sort -u \| wc -l
Trong đó class Assembly-CSharp được instance 191 ánh xạ guid → .cs.meta
Instance UnityEngine.UI 7 991 đếm theo guid
Instance Unity.TextMeshPro 4 957 đếm theo guid
Nút trên HUD chính (Main_UI/Btn_list) 27 cây scene
Sprite trong atlas _UI 374 ar-primary-v1/export/Assets/SpriteAtlas/_UI.json
Sprite trong atlas Cat 125 …/Cat.json
Tổng Sprite asset (export decrypted) 650 ls Assets/Sprite/*.asset

7.1 Cây màn hình đầy đủ (18 nhánh)

A = m_IsActive trong scene · obj = tổng GameObject của nhánh (kể cả chính nó).

Nhánh / panel A obj Class
Gun_manager 1 1 771 Gun_manager
├ Draw_Info_UI 0 35 –
├ GunInfo_UI 0 33 Gun_Info_UI
└ GunCollection_UI 0 1 702 Gun_Collection_UI
Shop_manager 1 667 Shop_manager
├ OfferWall 1 1 OfferWall_manager (R1-OUT)
├ Loading_UI (Inapp Purchasing) 0 17 – (R1-OUT)
├ PlusPack 1 1 PlusPack
├ StepUp 1 208 StepUp
├ DailyGun 1 124 DailyGun
├ WeeklyShop 1 226 WeeklyShop
├ DiaPig 1 57 DiaPig
└ AutoUpgrade_UI 0 32 AutoUpgrade_UI, Mute_Panel
Adventure_manager 1 955 Adventure_manager
├ Adventure_Enter_Popup 0 131 Adventure_Enter_popup
├ Adventure_Reward_UI 0 23 Adventure_Reward_popup
├ Adventure_PetSelect_Popup 0 463 Adventure_PetSelect_popup
├ Adventure_Map_Popup 0 222 –
├ PrismCore_Purchase_popup 0 94 –
└ AdventureExit_panel 0 21 Adventure_Exit_Panel
Pet_manager 1 70 Pet_manager
├ PetInfo_UI 0 34 Pet_Info_UI
└ Draw_Info_UI 0 35 –
SafeArea 1 6 593 – (21 con, xem §7.2)
Skin_manager 1 263 Skin_manager
├ SkinInfo_UI 0 33 Skin_Info_UI
└ SkinList_UI 0 229 Mute_Panel
FreeCash_manager 1 29 FreeCash_manager (R1-OUT)
└ FreeCash_UI 0 28 –
Buff_manager 1 61 Buff_manager
└ Buff_UI 0 60 Mute_Panel
Relic_manager 1 230 Relic_manager
├ Relic_Info_UI 0 33 Relic_Info_UI
└ Relic_Draw_Popup 0 196 Relic_Draw_Panel
Upgrade_manager 1 1 Upgrade_manager (UI ở SafeArea/Ingame/Upgrade_List)
Rank_manager 1 293 Rank_manager
├ Nickname_Change_UI 0 13 Nickname_Change_UI
└ Rank_UI 0 279 Rank_UI, Mute_Panel
Info_manager 1 55 –
└ Info_UI 0 54 Info_UI (3 Info_Item)
Rebirth_manager 1 138 Rebirth_manager
├ Rebirth_Popup_UI (AD) 0 15 –
├ Rebirth_Popup_UI 0 14 –
├ RubyUpgrade_UI 0 81 Rebirth_Panel_UI, Mute_Panel
├ Rebirth_Popup_UI (IAP) 0 16 –
└ Rebirth_FX 0 11 Rebirth_FX
Contents_UI 1 1 784 – (5 con, xem §7.3)
Review 1 12 Review_manager
UI_manager 1 154 UI_manager
├ Update_Panel / Update_Panel (Forced) 0 21 + 21 – (remote version gate)
├ Error_UI 0 18 –
├ DataLoadExit_UI 0 17 –
├ Loading_UI 0 17 –
├ Alert_list 1 3 Alert
├ SpeedBuff_Explain_UI 0 7 –
├ Banner_Place_Holder 0 1 R1-OUT
├ Loading_UI (AD) 0 17 R1-OUT
├ DiaAttraction 1 3 Dia_Attraction
├ NewGun_UI 0 20 NewGun_UI, Destroy
└ GameExit_panel 0 8 –
Setting 1 82 Setting
├ DataLoad_UI / DataSave_UI 0 15 + 15 DataLoad_UI / DataSave_UI
├ Redeem_UI 0 11 Redeem_UI
└ Setting_UI 0 40 –
Fish_manager 1 110 Fish_manager
├ FishDelete_UI 0 26 Fish_DeletePopup
├ Fishnfo_UI 0 43 Fish_Info_UI
└ Draw_Info_UI 0 40 –

7.2 Canvas/SafeArea — 21 nhánh

Panel A obj Class / con
Boss_UI 0 19 HUD in-game Boss: Time_Slider(Boss_Slider), HP_Slider, Exit_Btn, Currency
Pet_UI (SafeArea) 1 590 NewPet_UI 24 · Pet_UI 565
Main_UI 1 199 Loading_UI 17 · EcoMode_Panel_UI 7 · GameFail_obj 5 · GameSkip_obj 5 · Game_Slider 19 · GameWin_obj 9 · Btn_list 121 · Value_Slider 5 · Time_Slider 3 · Currency 7
Adventure_UI (SafeArea) 1 573 Adventure_Panel 572
Tutorial_manager 1 12 4 bước: 0, 2, 3, 4_hand(TutorialArrow_UI)
Ads_Remove (Forced) 0 27 Remove_ForceAds_UI (R1-OUT)
Fish_UI (SafeArea) 1 191 Fish_UI 190
Mission_maanger (sic) 1 3 725 LuxuryPass_Purchase_UI 53 · VipPass_Purchase_UI 71 · NewSeason_UI 153 · NewSeason_UI (forced) 153 · Mission_UI 3 294
Mine_UI 0 14 HUD Mine
Offline 1 44 Offline_Panel_UI 43
SpeedRun_UI 0 19 HUD Play
Ingame 1 42 Upgrade_List 40 (Upgrade_list, 3 Upgrade_Ingame)
Raid_UI 0 19 HUD Raid — HIDDEN
Monster_UI 0 37 HUD Hunt
Gun_UI (SafeArea) 1 670 GunList_UI 669
Shop_UI 0 169 Panel 167
DailyCheck 1 127 DailyCheck_empty 126
Floating Joystick 1 3 FloatingJoystick

7.3 Canvas/Contents_UI — 5 chế độ

Panel obj Con
Monster_UI 253 GameEnd_obj 65 · Monster_Start_UI 122 · GameSweep_obj 65
SpeedRun_UI 301 GameSweep_obj 65 · SpeedRun_Start_UI 123 · GameFail_obj 47 · GameWin_obj 65
Boss_UI 304 Boss_Start_UI 126 · GameWin_obj 65 · GameFail_obj 47 · GameSweep_obj 65
Mine_UI 235 MinePack_Purchase_UI 22 · GameEnd_obj 65 · GameSweep_obj 65 · Mine_Start_UI 82
Raid_UI 690 GameEnd_obj 54 · Raid_GunSelect_Popup 501 · Raid_Start_UI 134 — HIDDEN

7.4 27 nút HUD (Main_UI/Btn_list)

Boss_Btn(+Locked) · DailyGun_Btn(A=0) · OfferWall_Btn(A=0, +Event_obj) · PowerBuff_Btn · SpeedRun_Btn · Mission_Btn(+Mission_Alert_obj) · Gun_Btn · FreeCash_Btn(A=0) · Monster_Btn(+Locked) · WeeklyShop_Btn(A=0) · EcoMode_Btn · Skin_Btn · Mine_Btn(+Locked) · SpeedBuff_Active_obj(A=0) · Rank_Cheat_obj→Rank_Btn · Shop_Btn · Adventure_Btn(+Locked) · Rebirth_Btn(+Locked) · DailyCheck_Btn · Fish_Btn(+Locked) · Pet_Btn(+Locked) · Setting_Btn · StepUp_Btn(A=0, StepUp_Hud) · Info_Btn(A=0) · MoneyBuff_Btn · DiaPig_Btn · Auto_Btn.

7 nút có Locked_obj = 7 cổng mở khoá, khớp 100 % thang G151: Rebirth ≥20 · Mine ≥30 · Fish ≥50 · Boss ≥90 · Pet ≥110 · Hunt ≥110 · Trip ≥340 (biến cổng: Tree_manager.Stage_Value_Max = Level_Now + 10·Stage_Now).

LỚP GATE THỨ BA — TUTORIAL (chỉ thấy khi chạy thật, G192). Trên save mới, HUD chỉ hiện 2 nút: SpeedRun_Btn và Setting_Btn. Các nút Shop, Gun, Skin, Mission, DailyCheck, Auto, Eco, DiaPig, buff ×2 do TUTORIAL mở, không phải do Stage_Value_Max. ⇒ Với hoạ sĩ: HUD phải được thiết kế để mọc dần — bố cục không được vỡ khi chỉ có 2 nút.

Ảnh tham chiếu đầy đủ 27 nút trên save đã mở hết: [liveops catalog: 30_all_unlocked_hud.png].

7.5 IAP / shop — 34 product id (R1-OUT)

Con số thẩm quyền là 34 — disasm-proven Shop_manager.ItemIdxFromProductId RVA 0x2B2DE44 (xem doc 10 §6.1 để biết mỗi id trao gì). Lane này bổ sung nguồn thứ hai độc lập: Assets/Resources/IAPProductCatalog.json (8 264 B) khai báo 32 product cho Unity Codeless IAP. Hai nguồn khớp nhau:

34 (code) − 32 (catalog) = 2 = catgunner_luxury_pass + catgunner_luxury_upgrade — hai id này có trong code (ApplyLuxuryPass 0x2B32AA4 / ApplyLuxuryUpgrade 0x2B328F8) nhưng không khai báo trong catalog codeless ⇒ chúng được mua qua đường code, không qua CodelessIAPStoreListener. Đây là thông tin mới, không mâu thuẫn với doc 10.

32 product trong IAPProductCatalog.json:

Nhóm Product id Type
Bỏ quảng cáo remove_forced_ads, remove_all_ads NonConsumable
Gói tiện ích autoupgrade_pack, buff_pack, dia_pack, mine_pack NonConsumable
Kim cương dia_0 … dia_4 (5) Consumable
VIP vip_pass, vip_pass_2 Consumable
Core (Trip) catgunner_core_100/500/1050/3300, catgunner_core_daily_750, catgunner_core_weekly_1750, catgunner_core_weekly_6000 (7) Consumable
Rebirth catgunner_rebirth_single Consumable
StepUp catgunner_stepup_0..4 (5) Consumable
DailyGun catgunner_dailygun_0..2 (3) Consumable
PlusPack catgunner_pluspack_time/reward/auto (3) Consumable

ĐÍNH CHÍNH RULES §R10 / G149 ("24 IAP"): con số 24 là sai. Đúng là 34 product id (ItemIdxFromProductId 0x2B2DE44, doc 10 §6.1), trong đó 32 khai báo ở IAPProductCatalog.json và 2 (catgunner_luxury_pass, catgunner_luxury_upgrade) chỉ có ở đường code. mine_ticket, fish_free, banner_enter, banner_reward, banner_weapon, sp_iap, reward_hub, f_cash KHÔNG phải product id — chúng là chuỗi place / khoá analytics / tên màn Almedia (doc 10 đã đính chính LIVEOPS_SURFACE §6.1). Xem G196.

Panel liên quan (đếm instance trong scene): 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 · Purchase_Btn 3 · VIP_Purchase_popup 2 · SaleValue_UI 12 · BuffPack_Purchase_BannerReward 1 · FreeCash_Banner 13.


8. NHIỆM VỤ / MÙA / BẢNG XẾP HẠNG

8.1 Mission_Type — 4 loại, 23 nhiệm vụ

dump.cs:587114: TreeCount=0, StageClear=1, Rebirth=2, PlayMine=3. Mission_manager scene 20427316: Mission_list 23 · Mission_Item_UI_List 23 · Reward_Normal_list 25 · Reward_Epic_list 25 · Mission_Reward_Slot_List 25 · NormalReward_Get/EpicReward_Get 25 bool · Max_Lv = 25 · Exp_balance = 100/cấp.

# Tên (nguyên bản) Type MissionValue Exp VIP
0–5 0..5.나무 부수기 TreeCount 100 / 300 / 700 / 2 000 / 10 000 / 20 000 10 –
6–11 6..11.스테이지 클리어 StageClear 5 / 15 / 25 / 50 / 100 / 200 10 –
12–17 12..17.환생하기 Rebirth 1 / 2 / 3 / 4 / 5 / 6 10 –
18–19 18..19.광산 플레이 PlayMine 1 / 2 10 –
20 20.나무 부수기 TreeCount 50 000 20 ✔
21 21.나무 부수기 TreeCount 100 000 20 ✔
22 22.스테이지 클리어 StageClear 300 20 ✔

⇒ 20 nhiệm vụ thường + 3 nhiệm vụ VIP. Mission_manager.is_Vip là static (restore từ save bằng một word store chung với is_SeasonStart — G329); HighTier_Gun_Table {16, 18, 20, 22, 24, 25, 27, 29} là static của cùng class (§3.1; nơi dùng chưa đọc).

8.2 Hai tuyến thưởng battle-pass (25 cấp mỗi tuyến)

MissionReward_Type: Dia=0, Gun=1, Core=2. Reward_Degree: Normal=0, Epic=1. RewardStatus_Type: NonClear=0, GetAble=1, Get=2, LuxuryBonus=3.

Cấp Normal Epic
0 Dia 200 Dia 600
1 Dia 240 Dia 720
2 Gun #10 Gun #15
3 Dia 320 Dia 960
4 Dia 360 Dia 1 080
5 Gun #14 Gun #19
6 Dia 440 Dia 1 320
7 Dia 480 Dia 1 440
8 Gun #15 Gun #20
9 Dia 560 Dia 1 680
10 Dia 600 Dia 1 800
11 Gun #19 Gun #24
12 Dia 680 Dia 2 040
13 Dia 720 Dia 2 160
14 Gun #20 Gun #25
15 Dia 800 Dia 2 400
16 Dia 840 Dia 2 520
17 Gun #24 Gun #29
18 Dia 920 Dia 2 760
19 Dia 960 Dia 2 880
20 Gun #25 Gun #30
21 Dia 1 040 Dia 3 120
22 Dia 1 080 Dia 3 240
23 Gun #29 Gun #34
24 Dia 1 160 Dia 3 480

(8/25 cấp mỗi tuyến thưởng súng; còn lại thưởng Dia. Cột type = Gun ⇒ RewardValue là GunNum.)

Quy tắc nhận thưởng = TUẦN TỰ, không phải ngưỡng số — disasm-proven Mission_manager.is_Reward_SequenceLocked(Reward_Degree, int Lv) RVA 0x2A71E5C: mốc Lv bị khoá chừng nào còn bất kỳ mốc thấp hơn chưa nhận (claimed[i] == false). Mảng claimed[] đo được 25 phần tử trên save mới ⇒ battle-pass đúng 25 bậc (khớp Max_Lv = 25 và 2 mảng Reward_*_list 25 phần tử trong scene). Nguồn runtime: [liveops catalog: PROBE_RESULT.md] §3.1 (đóng G178 mục 3b).

8.3 Mùa (Season) & xếp hạng

Mục Giá trị Bằng chứng
Season_Num, is_GunSeason, SeasonEnd_Date có trong Mission_manager scene 20427316
Panel mùa mới NewSeason_UI ×2 (thường + forced), 153 obj mỗi cái cây scene
Bảng xếp hạng (PlayFab) 3: StageRanking, BossRanking, MonsterRanking G143 / LIVEOPS_SURFACE.md
UI rank Rank_UI 279 obj · User_Info_UI ×31 · User_BossRank_UI ×12 · User_MonsterRank_Info ×6 · Nickname_Change_UI scene
Achievement KHÔNG CÓ hệ thành tựu riêng không tìm thấy class/enum nào; nhiệm vụ + battle-pass thay thế

9. ÂM THANH

16 AudioClip trong build, tất cả Vorbis .ogg (asset_lane §5). Sound_manager scene 20661551: sfxEntries 15 (đúng 15 SfxType), BGM_main, BGM_contents, blockSameFrameDuplicate = 1, blockCooldownDuplicate = 1, cooldownSeconds = 0.05.

# SfxType Clip Dài
0 Pop Popup1.ogg 0.16 s
1 Button Pop 6.ogg 0.30 s
2 Spawn Special & Powerup 45.ogg 1.86 s
3 Fusion Prize Wheel Spin 2 Reward.ogg 2.43 s
4 Upgrade Special & Powerup 43.ogg 1.50 s
5 Dont ClickyButton5a.ogg 0.27 s
6 Rebirth etfx_explosion_chargeup2.ogg 3.80 s
7 Purchase Prize Wheel Spin 2 Reward.ogg (dùng lại #3) 2.43 s
8 Shoot etfx_explosion_sharp.ogg 0.53 s
9 Select Click.ogg 0.10 s
10 Enter Transition_In.ogg 0.99 s
11 Win Positive.ogg 2.07 s
12 Fail Fail.ogg 0.40 s
13 UnSelect Click.ogg (dùng lại #9) 0.10 s
14 Tick GenericButton14.ogg 0.06 s
– BGM_main Relaxed_7_BlossomDrift.ogg 121.26 s
– BGM_contents Cute_5_MilkShake.ogg 105.00 s

Clip riêng biệt được dùng: 15 (13 SFX + 2 BGM). Clip KHÔNG dùng: 1 — espannol.ogg (2.38 s), nằm ở Assets/Resources/references/sounds/ cùng references/sprites/{L_EN,L_ES,L_FR}.png ⇒ asset mẫu của SDK (AlmediaLink/Adx), 0 tham chiếu trong Main.unity. R1-OUT.

Khối lượng âm thanh của cả game: 13 SFX + 2 nhạc nền. Đây là con số nhỏ đáng ngạc nhiên — game không có nhạc theo chế độ, không có voice, không có ambience.


10. FONT & BẢN ĐỊA HOÁ

10.1 Font — 13 = 9 TTF thật + 4 BITMAP FONT

A. 9 font TTF thật (dùng qua TextMeshPro / SDF — HUD, panel, mọi text UI):

Font Kích thước binary Ghi chú
NotoSansSC-Bold.ttf 10 549 020 B Trung giản thể
NotoSansJP-Bold.ttf 5 468 188 B Nhật
MPLUSRounded1c-Black.ttf 3 625 868 B
Mitme.ttf 1 520 240 B font chính (Latin/Hàn)
Thai.ttf 754 920 B Thái
ARIAL.ttf 778 552 B trong Resources/
LiberationSans.ttf 350 200 B fallback TMP
Inconsolata-SemiBold.ttf 98 400 B
PerfectDOSVGA437.ttf 81 192 B debug

B. 4 BITMAP FONT — KHÔNG phải TTF hỏng. Chúng là font ảnh: một bảng ký tự 42 glyph + một atlas PNG, vẽ bằng hệ mesh riêng (DamageTextManager.ShowDamageText → DamageTextObject.InitSprites RVA 0x2A544C8 → DamageTextSprite.InitChar 0x2A55EB8 → DamageTextSpriteManager.GetSpriteInfo 0x2A560EC), không qua TextMeshPro. m_FontData dài 0 là đúng thiết kế — bảng + PNG chính là cả font.

Font asset Style text (ShowDamageText(key,…)) Dùng ở đâu Glyph Atlas PNG Prefab
Damage "damage" (literal 0x5EA0338) số sát thương thường bay lên 42 Texture2D/Damage.png 512×512 (60 414 B) GameObject/Damage.prefab
Damage (Cri) "critical" (0x5EA0068) sát thương chí mạng ("+" + str) 42 Texture2D/Damage (Cri).png 512×512 (55 278 B) GameObject/Damage (Cri).prefab
Money_Cri "money" (0x5EA4B18) tiền rơi ("+" + Money_str) 42 Texture2D/Money_Cri.png 512×512 (59 857 B) GameObject/Money_Cri.prefab
Dia "dia" (0x5EA0898) kim cương rơi ("+{0}") 42 Texture2D/Dia.png 256×256 (32 312 B) GameObject/Dia.prefab

Bộ 42 glyph (giống hệt nhau ở cả 4 font):

+ . 0 1 2 3 4 5 6 7 8 9 B K M T a b c d e f g h i j k l m n o p q r s t u v w x y z

= 10 chữ số · + · . · 4 đơn vị thang-ngắn cũ B K M T · 26 chữ thường a–z.

26 chữ a–z chính là các CHỮ CÁI ĐƠN VỊ mà InfVal_change() sinh ra (a, b, c… = 10³, 10⁶, 10⁹…). Nét vẽ (artwork) của chúng lại là CHỮ HOA. Đó là lý do text sát thương hiện 3.12A trong khi HUD hiện 3.12a từ đúng cùng một chuỗi: chuỗi luôn viết thường, chỉ khác font vẽ nó. Có đúng 1 formatter trong game (InfVal_change RVA 0x44E47D4, 29 caller; mọi overload ToString khác có 0 caller game), và không có ToUpper nào trên đường floating-text. Nguồn: [evidence codegen: UPPERCASE_FINDING.md]; đã xác minh lại độc lập ở lane này (đọc Assets/Font/Damage.asset → m_FontData rỗng, 42 index: = đúng bộ trên; 4 PNG có thật).

QUY TẮC BẮT BUỘC CHO HOẠ SĨ / RESTORE — phải giữ nguyên dạng ATLAS. Thay 4 font này bằng một TTF thường sẽ âm thầm làm sai hai thứ: (1) chữ đơn vị chuyển từ nét-HOA sang nét-thường, (2) metric glyph đổi ⇒ số bay lên lệch khoảng cách/kích thước. Cũng KHÔNG được thêm .ToUpper() trong code — chuỗi SOT vốn viết thường. Bài test đúng cho lớp này là so ảnh render với atlas, không phải so chuỗi. ⚠ [SOT: DevXProject] có 4 file .ttf 0 byte bịa ra cho đúng 4 tên này — phải loại bỏ, không được mang vào project.

ĐÍNH CHÍNH G012: báo cáo asset ghi "Font Texture không giải mã được" (10 lỗi export ở ar-primary-v1). Trong bản ar-project-decrypted-v1 thì cả 4 atlas ĐÃ xuất thành công (Texture2D/{Damage, Damage (Cri), Dia, Money_Cri}.png). ⇒ font ảnh không phải gap về nội dung; chỉ là gap về định dạng/đường xuất. Xem G197.

Khối lượng font cho hoạ sĩ: 9 TTF là font mua/miễn phí sẵn có (0 công vẽ); 4 bitmap font = 4 atlas × 42 glyph = 168 glyph phải VẼ TAY (3 atlas 512×512 + 1 atlas 256×256). Đây là hạng mục art dễ bị bỏ sót nhất khi ước lượng.

TMP SDF atlas riêng: ARIAL SDF, LiberationSans SDF (+fallback), MPLUSRounded1c-Black Atlas, Mitme Atlas, NotoSansJP-Bold Atlas, NotoSansSC-Bold Atlas, Thai Atlas, Poppins-{Bold,Medium,Regular,SemiBold} SDF Atlas, Inconsolata-SemiBold Atlas — 20 texture Alpha8.

10.2 Bản địa hoá — I2 Localization

Chỉ số Giá trị Bằng chứng
Nguồn Assets/Resources/I2Languages.asset (196 775 B) asset
Ngôn ngữ 14 mLanguages
Term 317 đếm - Term:
Component Localize trong scene 819 đếm theo guid
Đồng bộ Google Sheet I2Loc Cat Gunner Localization, key [id đã lược bỏ] asset

14 ngôn ngữ: English en · Korean ko · Japanese ja · Chinese (Simplified) zh-CN · Chinese (Taiwan) zh-TW · Portuguese (Brazil) pt-BR · German de · French (France) fr-FR · Spanish (Spain) es-ES · Thai th · Indonesian id · Malay ms · Vietnamese vi · Russian ru.

2 term đặc biệt là term chọn font theo ngôn ngữ: font và font (outline) (giá trị: Thai / Mitme SDF / JP / CN …) ⇒ font được hoán theo ngôn ngữ qua I2, không hard-code.


11. VFX

Chỉ số Giá trị Bằng chứng
ParticleSystem trong scene 7 718 (+7 718 ParticleSystemRenderer) đếm type !u!198/!u!199
Biến thể FX trúng đạn 45 (§3.4) 45 con của Bullet_FX
Pool Bullet_FX 10 Polling_manager
Pool Bullet 27 Polling_manager
Particle_Polling (pool hạt) 3: Slime_Polling, Dust_Polling, Money_Polling cây scene
ParticleImage (hạt trên UI) 52 đếm theo guid ParticleImage.dll
Bullet_Mesh 1 215 đếm component
FXThrottle MIN_INTERVAL 0.05 · MIN_DIST_SQ 2.25 · MAX_PER_FRAME 3 dump.cs:596485

11.1 Phân bố ParticleSystem theo tên GameObject (top)

Số Tên Vai trò
1 034 Glow lõi sáng
597 Ring vòng xung
567 Trail vệt
459 SparkTrail tia lửa
345 Muzzle chớp nòng — 1 / vật thể Gun
324 SemiCircles
297 SmokeTrail
297 vfx_ToonProjectile_Fireball01Purple asset gốc gói Toon Projectiles
297 InnerRing
243 WhiteGlobe
216 Mesh mesh đạn
190 Circle / Beam / CloudBurst mỗi loại 190
135 Normal
120 GlowFlare / Center
90 Sphere / Nova / FireBall / SmokeClouds
37 × 45 <bậc>_<họ> 45 gốc FX, mỗi cái pool 37
27 FireFlies
18 GroundSpikes
9 Z Degree FX · shadow FX riêng bậc Z
1–2 GibletExplodeDirt, PortalDust, Slime, Tinysparkles, BasicZoneWhite, GlowCircle, Money

Tổng: 78 tên GameObject-VFX riêng biệt (45 gốc <bậc>_<họ> + 33 tên con/độc lập). Texture VFX gốc trong export: UniqueToonProjectilesVol1_10X10_8K_part1.png, nova_6x3.png, explosion_round_3x3.png, magic_line.png, magic_orb2.png, ice_spikes.png, decal_gibs.png, ToonCircle02_3x3.png, cloud_2x2_soft.png, cloud_2x2_hardshadow.png, sparkle3.png, ring.png, glow1.png, Circle{02,05,_0,_1}.png, rocket_gradient.png, triangle_curve.png, drop.png, HalfCircle.png, Star.png, Pattern.png, Cards.png, CardsLightBeams.png, Coin1..4.png, Fx_Cash.png ≈ 30 texture VFX.

Mesh VFX: ETFX_AuraVertical, ETFX_Rocket2, Ring02, RingMesh02 (4) — gói gốc EpicToonFX (Assets/Scripts/Assembly-CSharp/EpicToonFX, 13 script).


12. BẢNG TỔNG (dashboard ước lượng khối lượng)

Cột "asset" chỉ loại và số lượng. Không có giờ công — chủ ý theo yêu cầu.

12.1 Theo lớp nội dung

Lớp nội dung Số đơn vị Sprite 2D Spine Texture riêng Audio Prefab/Node Trạng thái
Mèo (nhân vật) 1 class / 3 instance – – Cat_Foot – 2 animator + 10 clip SHIPPED
Skin mèo 25 50 (2/skin) + 25 màu – – – 25 Skin_Item_UI SHIPPED
Pet 10 bậc dùng được (13 bộ art) 13 13 (JSON+atlas+PNG) 13 – 13 node Skin (New) 10 SHIPPED / 3 HIDDEN
Súng 65 (13 bậc × 5) 65 – – – 65 slot Cat.Gun_list, 345 Gun SHIPPED
GunType 7 – – – – – SHIPPED
FX đạn (trúng) 45 biến thể – – ~30 texture VFX – 45 node + 10 pool SHIPPED
Đạn 27 pool Bullet + 1 215 Bullet_Mesh – – – – 4 mesh ETFX SHIPPED
Muzzle 345 Muzzle PS – – – – – SHIPPED
Cây (Tree) 4 bậc × 10 chủ đề 40 – – – 501 instance SHIPPED
Quái (Hunt) 10 chủ đề × 2 20 + 10 màu – – – 240 pool SHIPPED
Quặng (Mine) 2 2 – – – 1 000 pool SHIPPED
Boss rồng 9 27 (9 × idle/normal/die) – 9 sheet 2048×1024 – 9 Skin_obj + Animator SHIPPED
Raid worm 5 – – 5 + Raid.png – 5 Skin_obj + Animator HIDDEN
Cá (Fish) 13 bậc 39 (3 bộ × 13) – – – 20 ô bể SHIPPED
Map chính 10 chủ đề 10 nền + 10 border-up + 10 border-down + 10 màu – – – 12 Map_Grid SHIPPED
Trip map 3 bối cảnh (Forest/Desert/Glacier) 3 nền map + 4 icon tiền tệ (3 Core + PrismCore) – – – RenderTexture map, 3 slot pet, 5 bậc mở, 5 mốc thời lượng SHIPPED
Relic 15 15 Relic_Item – – – 300 cấp × 3 bảng SHIPPED
Upgrade 3 + 3 (rebirth) – – – – 10 001 / 20 001 hàng bảng SHIPPED
Buff 2 icon On/Off – – – – SHIPPED
Nhiệm vụ 23 (20 + 3 VIP) – – – – 23 Mission_Item_UI SHIPPED
Thưởng pass 25 × 2 tuyến – – – – 25 Mission_Reward_Slot SHIPPED
Điểm danh 7 – – – – 7 DailyCheck_Reward SHIPPED
Gói liveops StepUp 5 · DailyGun 3 · PlusPack 3 · WeeklyShop 4 vị trí · DiaPig – – – – 4 panel SHIPPED (IAP R1-OUT)
Màn hình UI 18 nhánh / 78 panel / 73 panel con atlas _UI 374 + Cat 125 – 2 atlas 4096² ASTC 6×6 – 221 script identity SHIPPED
IAP 34 product id (32 ở catalog + 2 chỉ có ở code) – – – – 58 IAP_PriceText R1-OUT
Âm thanh 15 dùng / 16 có – – – 16 .ogg – 15 SHIPPED, 1 R1-OUT
Font TTF 9 – – 20 SDF atlas – – SHIPPED (font có sẵn, 0 công vẽ)
Font BITMAP (vẽ tay) 4 × 42 glyph = 168 glyph – – 4 atlas PNG (512² ×3, 256² ×1) – 4 prefab text bay SHIPPED — phải giữ nguyên atlas
Ngôn ngữ 14 / 317 term – – – – 819 Localize SHIPPED
VFX 7 718 ParticleSystem · 78 tên riêng · 52 ParticleImage – – ~30 – 3 pool hạt SHIPPED

12.2 Tổng asset toàn build (từ asset_lane.md + export decrypted)

Loại Số (export decrypted) Số (ar-project-v1) Ghi chú
Scene 1 (Main) 1 505 MB, 142 626 object
Sprite 650 .asset 364 tên duy nhất / 657 object tên gốc là số
SpriteAtlas 2 (Cat 125, _UI 374) packing table ở ar-primary-v1 JSON (G013) 4096×4096 ASTC 6×6
Texture2D 135 .png 134 +9 dragon 2048×1024 ASTC 8×8
AudioClip 15 (+1 ở Resources/references) 16 Vorbis
Font 12 trong Font/ + ARIAL ở Resources/ = 13 13 9 TTF + 4 bitmap font (bitmap = bảng 42 glyph + atlas PNG, m_FontData rỗng là đúng thiết kế)
TextAsset 27 (13 Spine JSON + 13 atlas + package.json) 33 +3 TMP + 4 SDK
AnimationClip 21 .anim 15 tên duy nhất
AnimatorController 15 .controller 13 tên duy nhất
Mesh 30 trong Mesh/ (26 Spine + 4 FX) + 20 Shapes primitive 50
Material 76 74
Prefab 32 (28 URP DebugUI + 4 damage-text) 44
Shader – 186 .shader dựng lại (234 object) phải qua shader gate
ParticleSystem 7 718 7 718 trong scene, không phải file

13. KHÔNG ĐẾM ĐƯỢC / UNKNOWN (không bịa)

Mục Vì sao Cách lấy
~~Giá trị 20 float của Tree_Grid.degreeRates~~ ĐÃ GIẢI (G353 / G701): đọc blob tại offset metadata, SHA-256 == tên field; bảng ở §5.2. Kỹ thuật này đóng mọi bảng InitializeArray (448/448 toàn build) đóng, xem §5.2
Mission_manager.HighTier_Gun_Table dùng để làm gì Giá trị đã đọc (§3.1) nhưng consumer chưa decompile DataRefsTo slot metadata của field → người gọi
MonsterCountPerLevel / SpawnIntervalPerLevel — "level" là gì 5 phần tử, consumer chưa đọc Decompile spawner của Monster_manager
~~Bảng XP Trip nào sống sau khi nạp save~~ ĐÃ GIẢI (G361): mảng scene (hex blob) sống; generator chỉ chạy khi mảng null đóng, xem §6.3
~~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 (§5.2) đóng
Bảng độ khó chế độ Play (SpeedRun_manager) Class không có field Health_Balance; độ khó suy từ Tree_manager Disasm SpeedRun_manager.Game_Cor
~~Ngưỡng SequenceLocked của Mission~~ ĐÃ GIẢI: không phải ngưỡng số mà là quy tắc nhận tuần tự (0x2A71E5C) đóng, xem §8.2
Ngưỡng LuxuryLocked / VIPLocked của Mission static, chưa đo G147 — probe tiếp
5 bản ghi Map_info_list mỗi vùng Trip là gì Scene có 3 vùng × 5 = 15 bản ghi, nhưng panel chạy thật chỉ vẽ 3 map. Chưa rõ 5 = 5 slot chuyến đi hay 5 map con. KHÔNG được đếm 15 bối cảnh art. Mở panel Trip ở Trip Lv ≥ 10 (mọi bậc Adventure_Unlock_Balance đã mở) rồi đếm thẻ map; hoặc decompile Adventure_Panel.Reload + Adventure_Map_item
Lịch "ngày mở" của Trip nằm ở đâu trong code Quan sát được T2/T5/CN · T3/T6/CN · T4/T7/CN nhưng chưa tìm ra hàm sinh lịch G191 — grep DayOfWeek quanh Adventure_manager
2 hàng cuối Fish_info_list (bậc 11 CriVal, bậc 12) ngoài đoạn đã trích trong lần chạy này sed -n '20930340,20930365p' Main.unity
Tên hiển thị (đã dịch) của từng súng/pet/skin Gun_list[].Name là tiếng Hàn thô; bản dịch nằm trong 317 term I2 nhưng chưa nối term↔index Đọc I2Languages.asset và khớp key Gun/…
Backend xác thực Redeem code không thấy endpoint G149 — probe
Vì sao Weapon_Get_Counts chỉ 10 phần tử trong khi có 13 bậc súng header nói "10등급"; có thể là log AppsFlyer chỉ theo dõi 10 bậc đầu Disasm Gun_manager.OnWeaponAcquired RVA 0x2B0A720
Monster có bao nhiêu "biến thể hành vi" biết Size_Big/Size_Small, Freeze(), Barrier_Touched() nhưng chưa dựng hành vi doc 05 §5

14. Raw evidence

Scene (Main.unity, export decrypted) — dòng bắt đầu MonoBehaviour: Monster_manager 20297237 · Gun_manager 20307967 · Raid_manager 20310101 · Polling_manager 20317279 · Shop_manager 20322307 · Adventure_manager 20323786 · Pet_manager 20323954 · Cat_manager 20324813 · Skin_manager 20325750 · Relic_manager 20345666 · Buff_manager 20339104 · Upgrade_manager 20353393 · Rank_manager 20417404 · Gun_Info_UI 20420869 · Pet_Info_UI 20418831 · Mission_manager 20427316 · Pet_Item_List 20429362 · StepUp 20430536 · SpeedRun_manager 20440285 · Boss_manager 20443894 · Mine_manager 20449982 · Rebirth_manager 20451280 · DailyGun 20652226 · Boss 20655082 · Sound_manager 20661551 · Gun_Item_List 20637063 · Tree_manager 20614875 · Bullet_Mesh 20668857 · Bullet 20794906 · Bullet_FX 20808833 · Map_Grid 20825393 · Cat 20912670 · Fish_manager 20930271 · Fish_Tank 21000328 · DailyCheck 21037794 · Raid_Boss 21128955 · Fish_Info_UI 21129831

  • 0x2B0A278 Gun_manager.DrawRandomGun → Random.Range(5·Degree, 5·Degree+5) ⇒ 5 súng/bậc
  • 0x2B0C09C Gun_manager.Has_S_Grade_Gun → quét Gun_Collect[20..24] ⇒ bậc 4 = S
  • 0x2B0ACE0 Gun_manager.get_AutoMerge_Limit_Degree → trần 6
  • 0x2B0BD90 Gun_manager.Degree_Color_return → index thẳng vào Degree_Colors
  • 0x2B46094 Tree_manager..cctor → Degree_Health_Balance {1, 1.8, 3, 35}, Degree_Money_Balance {1, 1.8, 3, 100}
  • 0x2B44288 Tree_Grid..cctor → degreeRates là float[5,4] (xmmword_105CBF0); giá trị: [evidence codegen: TABLE.md] hàng 14 (G353)
  • [evidence codegen: TABLE.md] — 22 bảng InitializeArray (HighTier_Gun_Table, MonsterCount/SpawnInterval, Adventure Unlock/Duration, GachaChances, DiaRewards, StepUp, DailyGun, Raid) — SHA MATCH 448/448
  • 0x2B440D8 Tree_Grid.Degree_Random_return → roulette 0..100 theo hàng Level
  • 0x2AFB480 Monster_manager.SkinSprite_return → (Wave % 10)·2 + is_boss
  • 0x2AF9250 Monster_manager.MonsterColor_return → Monster_Colors[Wave % 10]
  • xrefs_to 0x2B17E78 Pet_manager.Balance_Reload → 1 data-xref, 0 code-xref = DEAD CODE

dump.cs: :584959 AD_Type · :587114 Mission_Type · :587125 MissionReward_Type · :590227 SfxType · :590250 SfxEntry · :591540 Core_Type · :591551 Adventure_Map_Info · :592149 Relic_Type · :592170 Relic_Info · :592886 Buff_manager · :593002 Cat · :595437 Enemy.Type · :596333 Bullet · :596439 Bullet_Mesh · :596457 Bullet_FX · :596485 FXThrottle · :596504 Gun · :596519 GunType · :596533 Gun_Info · :596609 Gun_manager · :597791 Map_Grid · :602021 Tree_Grid · :602135 Tree_manager

Bitmap font (§10.1 B): [evidence codegen: UPPERCASE_FINDING.md] · [evidence codegen: text_spawn.cs.evidence] (4 style key: "damage" 0x5EA0338, "critical" 0x5EA0068, "money" 0x5EA4B18, "dia" 0x5EA0898) · RVA 0x2A544C8 DamageTextObject.InitSprites · 0x2A55EB8 DamageTextSprite.InitChar · 0x2A560EC DamageTextSpriteManager.GetSpriteInfo · 0x44E47D4 InfVal_change (29 caller, formatter duy nhất) · xác minh lại ở lane này: Assets/Font/{Damage, Damage (Cri), Dia, Money_Cri}.asset (mỗi file 42 index:, m_FontData rỗng) + Assets/Texture2D/{…}.png (512×512 ×3, 256×256 ×1) · gap G012 / G141 / G197

Asset: Assets/Resources/I2Languages.asset (14 ngôn ngữ / 317 term) · Assets/Resources/IAPProductCatalog.json (32 product) · Assets/SpriteAtlas/{Cat,_UI}.json trong ar-primary-v1 (125 / 374) · [report: asset_lane.md] §0/§4/§5

Runtime (lane liveops, read-only — dùng để xác nhận/đính chính số đếm tĩnh): [liveops catalog: PROBE_RESULT.md] §2.1 (Trip: 3 map Forest/Desert/Glacier + lịch thứ + 4 tiền tệ), §2.2 (Rebirth: 3 nâng cấp + Ruby + Super Rebirth ×3), §3 (Adventure_Unlock_Balance [0,1,3,6,10], Adventure_PetSlot_Unlock_Balance [0,2,7], Adventure_Duration_Balance [1,2,4,8,16]), §3.1 (is_Reward_SequenceLocked 0x2A71E5C, claimed[] 25 phần tử) · ảnh: [liveops catalog: 30_all_unlocked_hud.png] (27 nút HUD) và 31_panel_{Boss,Fish,Hunt,Mine,Pet,Rebirth,Trip}.png (7 panel late-game)

Lane khác: [liveops catalog: SCREEN_CATALOG.md] · [liveops catalog: UNLOCK_GATES.md] · [liveops catalog: LIVEOPS_SURFACE.md] · gap list (nội bộ) G012/G013/G139–G154, G170–G193 (lane liveops/monetization), G194–G202 (lane này)