11-content-inventory.md · Cập nhật lần cuối: 2026-09-05 08:45 +07 · sha256 nguồn 6cd02a16cebb11 — 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.CatGunner1.1.59 (tên nội bộ BardCat), build Android XAPK sha25610ada66082387da2fd3ddcb35966f8daf9bf7f4170d7850c86833ac00ac0fbe6. 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
Petcó node conSkin (New)với 13 con tên0..12, mỗi con mangSkeletonAnimation(spine-unity) trỏ đúng 1<Name>_SkeletonData. Đối chiếu 286 tham chiếuskeletonDataAssettrong 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_managerchứa const URL Google Sheet…/export?format=tsv&range=A2:I66(65 hàng × 9 cột — đúng bằng kích thướcGun_list). NhưngGun_manager.Balance_Reload(RVA0x2B0AB4C) 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_ReloadxâyStage_Health_Balance/Stage_Money_Balancetừ 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_Maxlê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
Tundratrong 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_BtnvàSetting_Btn. Các nútShop,Gun,Skin,Mission,DailyCheck,Auto,Eco,DiaPig, buff ×2 do TUTORIAL mở, không phải doStage_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 (
ItemIdxFromProductId0x2B2DE44, doc 10 §6.1), trong đó 32 khai báo ởIAPProductCatalog.jsonvà 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_cashKHÔNG phải product id — chúng là chuỗiplace/ khoá analytics / tên màn Almedia (doc 10 đã đính chínhLIVEOPS_SURFACE §6.1). Xem G196.Panel liên quan (đếm instance trong scene):
IAP_PriceText58 ·Core_Purchase_Panel7 ·Inapp_Purchase_Panel6 ·Inapp_Purchase_Popup5 ·Dia_Purchase_Panel5 ·VIP_Purchase_Ingame5 ·RemoveAds_Purchase_BannerReward11 ·PlusPack_Inapp_item7 ·Purchase_Btn3 ·VIP_Purchase_popup2 ·SaleValue_UI12 ·BuffPack_Purchase_BannerReward1 ·FreeCash_Banner13.
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–zchí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ện3.12Atrong khi HUD hiện3.12atừ đú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_changeRVA0x44E47D4, 29 caller; mọi overloadToStringkhác có 0 caller game), và không cóToUppernào trên đường floating-text. Nguồn:[evidence codegen: UPPERCASE_FINDING.md]; đã xác minh lại độc lập ở lane này (đọcAssets/Font/Damage.asset→m_FontDatarỗng, 42index:= đú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.ttf0 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 Texturekhông giải mã được" (10 lỗi export ởar-primary-v1). Trong bảnar-project-decrypted-v1thì 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
0x2B0A278Gun_manager.DrawRandomGun→Random.Range(5·Degree, 5·Degree+5)⇒ 5 súng/bậc0x2B0C09CGun_manager.Has_S_Grade_Gun→ quétGun_Collect[20..24]⇒ bậc 4 = S0x2B0ACE0Gun_manager.get_AutoMerge_Limit_Degree→ trần 60x2B0BD90Gun_manager.Degree_Color_return→ index thẳng vàoDegree_Colors0x2B46094Tree_manager..cctor→Degree_Health_Balance {1, 1.8, 3, 35},Degree_Money_Balance {1, 1.8, 3, 100}0x2B44288Tree_Grid..cctor→degreeRateslàfloat[5,4](xmmword_105CBF0); giá trị:[evidence codegen: TABLE.md]hàng 14 (G353)[evidence codegen: TABLE.md]— 22 bảngInitializeArray(HighTier_Gun_Table, MonsterCount/SpawnInterval, Adventure Unlock/Duration, GachaChances, DiaRewards, StepUp, DailyGun, Raid) — SHA MATCH 448/4480x2B440D8Tree_Grid.Degree_Random_return→ roulette 0..100 theo hàngLevel0x2AFB480Monster_manager.SkinSprite_return→(Wave % 10)·2 + is_boss0x2AF9250Monster_manager.MonsterColor_return→Monster_Colors[Wave % 10]xrefs_to 0x2B17E78Pet_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)