Nút UI
ButtonClickAddShake → shakeGP → vibrateRepeat26. Cohort: boardOpShake=false → place im, nút vẫn rung.
Tổng hợp tầng đếm (schema / registry / cohort), nhóm sự kiện, đồ thị biên độ theo thời gian từ số đo thật, và 5 hướng chọn cho port.
01 · Đếm tầng
Mỗi tầng đếm một thứ khác. Cohort live chỉ 2 feature; số lớn là kho thí nghiệm A/B trên schema/CDN.
317
Schema gộp X / XTrait
221
Haptic theo tên feature
157
Chỉ rung (vibration)
76
Bundle CDN registry
~224
Hợp registry ∪ schema haptic
2
Cohort user hiện tại
1
Trait JS giải mã được
50
Ghép lân cận (có thể nhiễu)
| Tầng | N | Ý nghĩa |
|---|---|---|
| Schema A/B sau gộp | 317 | Mọi mục dump từ RAM schema |
| … haptic-named | 221 | 157 rung · 56 lắc màn · 7 cả hai · 1 visual |
| … ghép lân cận | 50 | Có tham số/hàm rung; có thể lẫn chuỗi kế bên |
| … Revive lắc khối | 46 | Đổi khối, không rung motor |
| CDN traits_registry | 76 | 73 có bundle trong registry |
| Cohort live (jsb) | 2 | ButtonClickAddShake + isOpenVibrate |
| JS decoded | 1 | ButtonClickAddShakeTrait (HEK còn lại) |
Server layer ~215 features; chỉ 2 haptic được gán cho cohort này. Biến thể sóng khác chỉ server có — bơm local không nạp trait nếu server không bật.
02 · Nhóm sự kiện
Cùng pipeline L3–L6, nhưng mỗi nhóm gate và waveform khác nhau.
ButtonClickAddShake → shakeGP → vibrateRepeat26. Cohort: boardOpShake=false → place im, nút vẫn rung.
Cùng trait nút; cần boardOpShake true. Cohort hiện tại tắt.
EliminationVibrationTier (L1+L6). Không trong cohort live; port hardcode 25/40/55/70 ms @255.
ShakeNativeByChangSkin → allClearShake tiers 1–6 (amp↑, ms↓, pulses=tier).
vibrateRepeatFrequency: chống dồn 25 ms; timings [0,40,25,40,25], amp 180.
sg_fkmj_* → types "1"…"5" (30–150 ms, pattern 2 nhịp).
Toggle isOpenVibrate; Cocos2dxHelper.vibrate(sec); RN VibrationModule.
shakeIOS → shakeOnceIOS(level) từ buttonClickIosShakeLevel[0|1]. Android: checkAfterIPhone13 luôn false.
03 · Sóng mạnh/yếu
Từng tab = một nhóm 01–08 ở trên. Trục X = ms. Trục Y = amp 0–255. Đoạn on = sin nội bộ (lực); off = nghỉ. Envelope motor, không phải audio.
04 · Hướng chọn
Khuyên B cho parity cảm giác gần gốc mà không cần server gán đủ trait.
Nút theo shakeTimes/Strength cohort; place im (boardOpShake false); không clear/all-clear. Khớp máy test hiện tại, lệch GDD cảm giác xoá hàng.
Giữ sóng nút live. Thêm eliminationTierMs [25,40,55,70] và allClearShake tiers 1–6 từ cohort cũ / GDD. Đã có sẵn trong vibrate_feel.h.
Đưa bảng duration/amp/gate lên RC. Đổi cohort không ship app. Cần pipeline config + fallback khi thiếu key.
75/76 trait còn HEK. Bơm feature local không nạp trait. Chỉ lấy thêm khi server chia cohort rồi quét RAM.
Một amp/ms cho mọi event, hoặc tôn trọng toggle off. Nhanh nhưng lệch feel gốc rõ.
Port hiện tại đi hướng B: nút từ trait cohort + clear/all-clear hardcode trong core.
05 · Giới hạn
| Rủi ro | Hệ quả |
|---|---|
| 50 mục "ghép lân cận" | Có thể lẫn chuỗi RAM kế bên — không coi là 50 sóng chắc. |
| 224 ≠ 224 sóng trên 1 máy | Cohort chỉ 2; còn lại là kho thí nghiệm server. |
| HEK trait | Không bẻ khoá; không claim đã có logic 75 trait còn lại. |
| OS + motor | Cùng waveform app; cảm giác tay khác theo máy / scale OS. |
| iOS IPA chưa có | Simulator boot sẵn; dump static khi có IPA trong ref_ipa/. |