mirror of
https://github.com/Dingo-Shenanigans/ReSkate.git
synced 2026-10-28 12:36:53 +01:00
Windows pads every read of a DualShock 4 over Bluetooth to that pad's longest input report, 547 bytes. The full report (0x11) inside it is 78 bytes and ends in a CRC-32, and the CRC was refreshed only when a read was exactly 78 bytes. A report the overlay changed on such a pad (made neutral under a menu, passed through the gamepad filter, or its D-pad hidden by Dark Pop) kept its old CRC, and the game's reader discards a report whose CRC does not match, so the change never reached it. The CRC now goes at offset 74, over the 0xA1 input prefix and the 74 bytes before it, in a 78-byte read or a padded 547-byte one, and the padding is left alone. The CRC moves to playstation_report.h as refresh_playstation_bluetooth_crc, where the PlayStation report test checks it against a separate table-driven CRC and two zlib answers, and the copy Dark Pop kept for itself is gone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>