com.block.juggle · 10.9.3

Có chia nhánh rung không? Máy khác nhau thế nào?

Hai tầng khác nhau: nhánh sự kiện (app quyết định có rung / sóng nào) và máy/OS (chỉ scale feel, không đổi timing app gửi). Dưới là sóng từ số dump thật.

cohort: boardOpShake false amp dumpsys = strength/255 usage MEDIA

Câu trả lời ngắn

Có — chia nhánh sự kiện

Cùng một máy, cùng toggle rung ON: nút / đặt khối / xoá ≥4 / all-clear không cùng một đường. Mỗi nhánh có trait + gate L6 riêng → sóng khác hoặc im.

  • Nút vs place: cùng trait, place thêm boardOpShake
  • Clear ≥4: trait khác, one-shot ms theo lines+combo
  • All-clear/skin: trait khác nữa

Không — không chia nhánh theo máy/OS

App không gửi waveform khác theo Samsung vs OnePlus hay Android 12 vs 14. Máy chỉ nhận cùng số → motor/OS scale amp (MEDIA). Khác máy cảm giác khác, timing app giống.

  • Khác cohort server = khác config trait (không phải khác OS)
  • API <26: path chính vibrateRepeat26 chết (im)

Nhánh sự kiện trên 1 máy (cohort dump)

Config thật trên máy dump: chỉ ButtonClick + isOpenVibrate; boardOpShake false. Cột phải = kết quả quan sát / suy ra từ gate.

Nút lobby
L1–L5 OK · L6 không gate thêm · shakeGP
RUNG
Đặt khối
Cùng trait · L6 boardOpShake = false
IM
Xoá ≥4 dòng
Cần trait EliminationVibrationTier — cohort sau refresh không có
IM
All-clear / skin
Trait ShakeNativeByChangSkin — không có trên cohort dump
IM
Đặt khối (cohort khác)
Nếu server gán boardOpShake true → cùng sóng nút
RUNG (sóng A)
Xoá ≥4 (cohort cũ)
Có Elimination · ms ∈ [25,40,55,70] @ 255
RUNG (sóng C)

Điểm then chốt: “máy khác” rung khác thường vì server gán cohort khác (bật/tắt trait + đổi số), không vì code Android chọn nhánh theo model máy.

Đồ thị sóng (số dump)

Trục X = ms. Cao = biên độ 0–255 (dumpsys ≈ /255). Khối xám = nghỉ (amp 0).

A · Nút (đang chạy)

ButtonClickAddShake — cohort dump

shakeTimes [0,10,10,30,5,15] · shakeStrength [0,230,0,255,0,255] · cụm 4 rồi timeout cụm sau

10ms · 230 10 nghỉ 30ms · 255 5@0 15ms · 255 cụm 1 → vibrateRepeat26 cụm 2 (sau timeout)
rung (amp>0) nghỉ cụm 2 dumpsys ≈ 10ms@0.90 + nghỉ + 30ms@1.00 rồi 5+15ms@1.00
B · Đặt khối (cohort dump)

Cùng sóng A — nhưng L6 chặn

boardOpShake false → this.boardOpShake && this.shake() = không gọi native. Sóng dưới = nếu bật flag (cùng A).

— không có waveform (im) — Samsung A05s dumpsys: hết Step=80ms inject khi boardOpShake=false; nút vẫn rung
C · Xoá ≥4 (cohort cũ có trait)

EliminationVibrationTier — one-shot

ms = [25,40,55,70][min(s+p,4)-1] · amp luôn 255 · s=lines≥4?2:1 · p combo ≥4/6/8

4 bậc ms @ amp 255 (không phải cụm shakeTimes) 25ms bậc 1 40ms bậc 2 55ms bậc 3 70ms · amp 255 · bậc 4 (lines+combo cao) Một xung duy nhất — khác hẳn sóng A (nhiều đoạn nghỉ/amp)
D · All-clear (số port / cohort cũ)

ShakeNativeByChangSkin → pulses lặp

Ví dụ cohort cũ: delay 800ms, max 6, ms 200. Port vibrate_feel.h map theo lần all-clear trong ván.

delay đầu → các xung 200ms (minh họa 3 xung) delay

Hai máy dump — khác gì?

OnePlus 9R (Android 14) và Samsung A05s. So đúng tầng.

Giống nhau (app gửi)

  • Cùng method vibrateRepeat26
  • Cùng timing/amp từ props trait
  • Cùng 6 lớp cổng logic
  • Không có bảng “nếu Samsung thì sóng X”

Khác nhau (không phải nhánh app)

  • Cohort server có thể khác → bật/tắt trait khác
  • Motor + scale OS (MEDIA) → feel dumpsys khác dù cùng strength
  • hasAmplitudeControl() → một số path phụ flatten amp
  • API <26 (không có trong 2 máy dump) → path chính im

Hiểu nhanh: nhìn sóng A/B/C/D = khác kịch bản. Nhìn 2 máy cùng cohort = cùng sóng số; khác cảm giác tay = OS/motor. Nhìn 2 máy khác cohort = có thể im vs rung vì server, không vì model.

Config đang chạy (máy dump)

FeaturePropsHệ quả
ButtonClickAddShake
id 331816003
shakeTimes [0,10,10,30,5,15]
shakeStrength [0,230,0,255,0,255]
boardOpShake false
Nút = sóng A
Place = im
isOpenVibrate
id 167900002
defaultStatus 1, firing 1 L3 mặc định cho phép rung (user vẫn tắt được)
Elimination / ChangSkin — không có trên cohort sau refresh Clear / all-clear im trên máy này

Server có config: A/B features[] trong jsb.sqlite. Schema ~221 tên / 76 bundle; máy chỉ nhận ít biến thể theo phân khúc. 10× clear data trên cohort này vẫn 2 feature trên.

SDK cắt gì (không phải “máy A vs B”)

SDKPath nút/placeÝ nghĩa
< 26vibrateRepeat26 returnIm hoàn toàn trên đường chính
≥ 26createWaveform(timings, amp, -1)Cùng số JS gửi
≥ 29 / 31sub-game / RN / FrequencyKhông đổi nút/place lobby