Độ khó & ép chết Endless theo Block Blast
Tổng hợp phân tích SPEC 55 thẻ + data block-blash trước khi port. Mục tiêu: đường cong Endless Club gần BB, giữ máy sinh khối Club.
Phạm vi SPEC
Nguồn: BB-DEV_SPEC_ENDLESS_55_THE_VIBE_CODE.md (nháp 29/10). Chỉ Endless/Classic. ActiveConfig / ngày 15+ nằm ngoài đề xuất mới.
| Nhóm | Số thẻ | Việc |
|---|---|---|
| Nền & khung phát khay | 4 | Config, counters, log 12 bước, điểm |
| Luật P0 | 7 | Replace, chống chết, revive gate |
| Luật khay khó | 1 | Hard path |
| Luật bộ Config | 21 | Trait chọn/đổi khay theo Config |
| Nới tay / hồi sinh / bàn đầu | 22 | FTUE, revive, init board |
Luồng phát khay (N.3)
Khả thi theo vùng
Club đã port hệ chết riêng; thiếu lớp điều tiết kiểu BB.
| Vùng | Verdict | Ghi chú |
|---|---|---|
| P0 nền (N.2, N.3, R.47, H.*) | Cao | Club đã gần đủ counters / revive / chống chết |
| Ép chết Club sẵn có | Đã port | OfferDeathBlock, InducedDeath, ModelControlDieBoard |
| DeadlyToHard / NewDeath / Puzzle100 | Trung bình | Thân + Config có trong block-blash |
| Pipeline BB 12 bước thay nguyên Club | Rủi ro cao | Ổn nếu chỉ móc trait vào chỗ tương đương |
| Map id BB ↔ StrategyType | Bắt buộc | Chưa có bảng chuẩn trong Club |
| ActiveConfig / ngày 15+ | Bỏ | Theo đề xuất SPEC mới: chỉ Config mọi ngày |
Nhãn Club trên thẻ
| Nhãn | Số | Ý nghĩa làm việc |
|---|---|---|
| không thấy | 19 | Viết mới |
| tương đương một phần | 13 | Dễ đụng hệ cũ |
| có thân hàm | 12 | Chỉnh ngưỡng / điều kiện |
| chưa rõ | 7 | Cần audit trước |
| chỉ trùng tên / có một phần | 3 | Không coi là đã có |
Lệch kiến trúc
Điểm then chốt: hai game không cùng lớp điều khiển độ khó.
Block Blast
- Trait JS + OFFER_TYPE id
- Engine native libtask.so
- Config 229 feature trong traitConfigData.json
Block Club (port)
- Strategy tên: OfferDeathBlock…
- Engine nebula / Club trong game/core/src/solution/
- Flags endless.json (~203) + DIFFICULTY-REPORT 34/34
Club không thiếu ép chết. Club thiếu lớp BB điều tiết: chết→khó, cứu khi 3 khay chết, Puzzle100 theo giờ, chống chết sau engine kiểu đổi 1 khối 1..42.
Data đủ trong block-blash
| Nguồn | Dùng cho |
|---|---|
| docs/port/analysis/server/traitConfigData.json | Config 229 feature: DeadlyToHard, ClassNewDeathOptimize, puzzle100, revive… |
| classic-re-G1/G2-*.md | Thứ tự hook + thân DeadlyToHard / NewDeath type1/2 |
| OFFER_TYPE_FULL_CATALOG_VI.md + golden capture | Map id (4013…) và chuỗi offer |
| SPEC §Giới hạn | TBD: FastHandPunish, LongThink, Puzzle100 id 9 vs runtime 16009 |
Ba hướng · ảnh hưởng hướng B
A = cảm giác ép chết tối thiểu. B = full 55 thẻ Config. C = chỉ audit hệ Club sẵn có.
A · P0 + DeadlyToHard/NewDeath/Puzzle100
- Đổi rõ cảm giác chết
- Ít đụng FTUE / revive sâu
- ~1–2 tuần tập trung
B · Full 55 thẻ Config
- Đổi identity độ khó Endless sang gần BB
- Đè / chỉnh nhiều luật Club đã 100%
- Nhiều tuần; regression cao
C · Chỉ audit hệ chết Club
Không import trait BB. Giữ identity Club. Không đạt mục tiêu “gần Block Blast”.
Nếu chọn B — ảnh hưởng gameplay
| Vùng | Hiện Club | Sau B |
|---|---|---|
| Ép chết | OfferDeath / InducedDeath | Thêm DeadlyToHard, NewDeath, Puzzle100 → chết sớm hơn / chết→khó / cứu khi 3 khay chết |
| Chống chết | ReduceDifficultyProtect → RandomNoDie | R.47 kiểu BB (đổi 1 khối 1..42) — 2 lớp cứu, dễ chồng |
| Hồi sinh | Gate Club D20–D21 | H.* theo Config BB (limit 3, score gate) — đổi nhịp ads/revive |
| Bàn đầu / nới tay | ClearBoard / RecommendBoard | InitBoardDelay, NewUserLevel, NSR… — FTUE lệch bản ship |
| Combo / hard chuỗi | HardProblem + combo Club | OpenChangeContinueHard, MoreClearStopCombo… — pacing điểm khác |
Ảnh hưởng kỹ thuật khi B
- Lớp trait + bảng map id BB → StrategyType; giữ engine.
- Hook tại getStrategy / replace / after-engine / revive.
- Hai nguồn flag: endless.json Club vs nhúng Config BB — cần 1 nguồn hoặc merge.
- P2 (MAB/bandit, model server): stub OFF hoặc skip dù “full”.
- Test: doctest từng trait + golden offer; thiếu golden → QA tay nhiều.
Hướng làm nhỏ nhất đủ việc
- Bảng map BB offer id → StrategyType Club (+ fail-list).
- Trait thin layer trên pipeline Club — không thay OfferDeath* / InducedDeath* engine.
- P0: counters persist (N.2), log tầng (N.3), R.47 chống chết, chỉnh H.* theo Config.
- Lõi cảm giác chết: DeadlyToHard + ClassNewDeathOptimize type1 + Puzzle100 timing.
- Nếu B: batch Config còn lại theo P1; bỏ ActiveConfig.
- Doctest từng trait; so chuỗi offer với golden BB khi map ổn.
Giới hạn & rủi ro
| Mục | Chi tiết |
|---|---|
| TBD thẻ | N.4 điểm; R.16 MAB; R.49 Puzzle100; R.23/24 MoreClean*; R.46 NewDeath type2; R.53 MoreClearStopCombo |
| Map id sai | Code chạy nhưng cảm giác ép chết lệch |
| Cứu kép | Lớp Club cũ + R.47 BB cùng bật → rối hơn cả hai game |
| SPEC vs port Club | SPEC ghi thân death Club “chưa đọc”; port đã có — xác minh trước khi móc trait đè |
| Chưa đo | Chưa so runtime Club vs BB cùng seed |
Chốt trước khi code
A chỉ P0 + DeadlyToHard/NewDeath/Puzzle100 · B full 55 thẻ Config · C chỉ audit hệ Club.
B khả thi, nhưng Endless Club đổi identity độ khó (hướng BB), không phải vá thêm vài thẻ.