Lỗ hổng "Ngẫu nhiên Tương quan" trong Slay the Spire 2: Khi RNG trở nên dễ đoán
Một phân tích kỹ thuật mới đã phát hiện ra lỗi nghiêm trọng trong hệ thống tạo số ngẫu nhiên (RNG) của Slay the Spire 2. Do tính tuyến tính của lớp System.Random trong C#, người chơi có thể dự đoán kết quả của các sự kiện ngẫu nhiên như lời nguyền, rơi potion và thẻ bài dựa trên các lựa chọn ban đầu.

Bạn có bao giờ cảm thấy như mình luôn gặp xui khi chơi Slay the Spire 2? Ví dụ, liên tục nhận được lời nguyền Debt từ Neow's Bones, hoặc không bao giờ thấy rơi potion trong trận đầu tiên? Có thể bạn không "xui" như bạn nghĩ. Một bài viết kỹ thuật gần đây đã chỉ ra rằng, sự "ngẫu nhiên" trong game thực tế đang bị ảnh hưởng bởi một lỗi lập trình được gọi là Correlated Randomness (CRNG) - hay sự ngẫu nhiên tương quan.
Dưới đây là ba sự thật kỳ lạ về Slay the Spire 2 (phiên bản beta v0.107.0) mà bài viết đã tiết lộ:
- Nếu bạn chọn Neow's Bones ở khu vực Underdocks, lời nguyền nhận được có ~54% khả năng là Debt.
- Trong sự kiện Trash Heap (chỉ có ở Underdocks), hoàn toàn không thể nhận được thẻ bài Rebound.
- Trận đấu đầu tiên ở Underdocks có 76% tỷ lệ rơi potion, trong khi con số này ở Overgrowth chỉ là 4%.
Vậy điều gì đang xảy ra?
Nguyên nhân sâu xa: Tính tuyến tính của System.Random
Để ngăn chặn việc kết quả của một sự kiện ngẫu nhiên ảnh hưởng đến sự kiện khác (ví dụ: kết quả combat không nên ảnh hưởng đến phần thưởng thẻ bài), Slay the Spire 2 sử dụng nhiều bộ tạo số giả ngẫu nhiên (RNG) riêng biệt. Mỗi RNG được khởi tạo với một "seed" (hạt giống) khác nhau dựa trên seed gốc của lượt chơi.
Về mặt lý thuyết, code trông sẽ giống như thế này:
Rng UpFront = new Rng(seed + hash("up_front"));
Rng Shuffle = new Rng(seed + hash("shuffle"));
Rng CombatCardGeneration = new Rng(seed + hash("combat_card_generation"));
// ... và nhiều hơn nữa
Tuy nhiên, vấn đề nằm ở việc game sử dụng lớp System.Random mặc định của ngôn ngữ lập trình C#. Thuật toán bên trong lớp này có tính tuyến tính (linear) gần như hoàn toàn đối với seed khởi tạo.
Điều này có nghĩa là nếu hai RNG có seed chênh lệch nhau một khoảng cố định, thì kết quả đầu ra của chúng cũng sẽ chênh lệch nhau một khoảng có thể dự đoán được. Biết kết quả của RNG này, bạn có thể suy ra kết quả của RNG khác.
Biểu đồ tương quan giữa biến thể Act và thẻ bài biến đổi
Những hậu quả hài hước và nghiêm trọng
Sự tương quan này dẫn đến những hệ quả thú vị, đôi khi ảnh hưởng trực tiếp đến cân bằng gameplay.
Neow's Bones và lời nguyền Debt
Như đã đề cập, việc chọn Neow's Bones ở Underdocks thường xuyên đưa ra lời nguyền Debt. Nguyên nhân là do RNG xác định lời nguyền này và RNG xác định biến thể Act 1 có mối liên hệ toán học. Điều này khiến Neow's Bones trở nên tệ hơn nhiều so với thiết kế, vì các lời nguyền nhẹ như Clumsy hay Injury hiếm khi xuất hiện.
Trash Heap và thẻ Rebound
Vì Trash Heap chỉ xuất hiện ở Underdocks, nó chịu sự chi phối của cùng một ràng buộc seed. Kết quả là, trong chế độ chơi đơn, thẻ Rebound không bao giờ xuất hiện trong danh sách phần thưởng của sự kiện này. Điều này khiến việc hoàn thành bộ sưu tập thẻ bài (Compendium) trở nên bất khả thi nếu không can thiệp vào code.
Tỷ lệ rơi Potion chênh lệch
Tỷ lệ rơi potion ở trận đầu tiên cực kỳ lệch lạc: 76% ở Underdocks so với 4% ở Overgrowth. Điều này ảnh hưởng đến chiến lược chọn di vật khởi đầu (Neow relic) của người chơi.
Ví dụ về các yếu tố ngẫu nhiên trong game như trứng của Ovicopter
Dự đoán mọi thứ: Từ di vật đến quái vật
Bài viết chỉ ra rằng bạn có thể dự đoán rất nhiều thứ trong game dựa trên các thông tin ban đầu:
- Large Capsule: Ở Underdocks, di vật này hiếm khi xuất hiện (1.65%), nhưng nếu xuất hiện, 63% khả năng nó là Rare.
- Small Capsule: Ở Underdocks thường cho Common, còn ở Overgrowth thường cho Uncommon hoặc Rare.
- Doll Room (Act 2): Bạn có thể dự đoán chính xác con búp bê nào sẽ nhận được dựa trên di vật curse pool ban đầu.
- Lightning Orbs: Nếu chơi nhân vật Defect, bạn có thể biết quả cầu đầu tiên sẽ đánh vào kẻ địch nào.
Ngay cả những chi tiết nhỏ như ngoại hình của trứng trong sự kiện Ovicopter hay thứ tự hành động của quái vật cũng chịu ảnh hưởng bởi seed ban đầu.
Lời kêu gọi sửa đổi từ cộng đồng kỹ thuật
Tác giả bài viết, một người chơi kiêm lập trình viên, cho rằng đây là một lỗi cần được sửa, đặc biệt khi game vẫn đang ở giai đoạn Early Access. Việc một số di vật trở nên vô dụng hoặc một số thẻ bài không bao giờ xuất hiện là một thiếu sót lớn trong một tựa game chiến thuật được thiết kế kỹ lưỡng.
Giải pháp khá đơn giản: Thay thế System.Random bằng một thuật toán PRNG phi tuyến tính hiện đại hơn (ví dụ như PCG32) hoặc băm (hash) các seed trước khi đưa vào RNG. Việc này sẽ loại bỏ hoàn toàn sự tương quan và trả lại tính ngẫu nhiên thực sự cho trò chơi.
Đối với người chơi phổ thông, việc biết về lỗi này có thể giúp họ hiểu rõ hơn về cơ chế game, nhưng cũng có thể làm giảm đi sự bất ngờ thú vị. Hy vọng nhà phát triển Mega Crit sẽ sớm khắc phục vấn đề này trong các bản cập nhật tới.
Bài viết liên quan

Công nghệ
Đây là BIOS đang nói chuyện: Xin hãy sửa tôi, máy tính của bạn đã hỏng
12 tháng 6, 2026

Công nghệ
Startup Patina dùng AI và thiết kế phân tử để "lật mặt" ngành công nghiệp nước hoa
21 tháng 5, 2026

Công nghệ
Startup Battlefield 2026: Hướng dẫn đăng ký và những điều bạn cần biết trước hạn chót 8/6
08 tháng 6, 2026
