Làm cách nào để triển khai hệ thống savegame tinh thần dựa trên mật khẩu theo phong cách retro?


20

Làm cách nào để tạo một hệ thống mật khẩu cho trò chơi một người chơi giống như những người chơi được sử dụng trong các trò chơi console cũ hơn?

Ví dụ: Mega Man X tiết kiệm công việc bằng cách cung cấp cho bạn một loạt các số mà bạn có thể nhập sau để tải khoản tiết kiệm của mình.


3
Đừng làm những gì Donkey Kong (NES) đã làm - điều này cho phép bạn tiết kiệm vào hộp mực nhưng KHÔNG BẢO QUẢN SỐ LƯỢNG SỐNG - vì vậy bạn sẽ có được nhiều sinh mạng từ cấp độ đầu tiên (như 24), đi ngủ, đi ngủ LÊN TỚI 3 - Tôi ghét điều đó
Alec Teal

10
Lưu ý Pedantic: một hệ thống mật khẩu không lưu trạng thái trò chơi, nó tải một trạng thái được xác định trước .
Lilienthal

5
@Lilienthal không nhất thiết. Có lẽ nó chỉ là một loại "kết xuất" của một số trạng thái biến, được xáo trộn với một đại số hai chiều xác định.
o0 '.

2
@Lohoris Có, nếu bạn có đủ entropy trong mật khẩu của mình, bạn có thể coi đó là một loại trạng thái đã lưu đủ gần để giống với các trò chơi lưu hiện tại. Rốt cuộc, cả hai đều yêu cầu một cách để xuất và nhập trạng thái của trò chơi. Tuy nhiên, entropy cần thiết cho bất cứ thứ gì giống như một bản lưu thực sự (vị trí / điểm kiểm tra chính xác, sinh mạng, kẻ thù bị giết, số lượng đạn, ....) sẽ yêu cầu cả mật khẩu rất dài và thuật toán rất phức tạp. Đối với các trường hợp quyết định sử dụng mật khẩu qua lưu trữ có ý nghĩa (nếu thậm chí có bất kỳ), câu châm ngôn nên giữ đúng.
Lilienthal

3
@AlecTeal Chính xác thì "ngu ngốc" là gì? Tôi đang đánh giá mật khẩu so với lượng dữ liệu được lưu trữ trong các trò chơi hiện đại, nơi chúng rõ ràng không phù hợp với đại đa số.
Lilienthal

Câu trả lời:


32

Đầu tiên, chia nhỏ trạng thái trò chơi của bạn (hay đúng hơn là các khía cạnh của trạng thái bạn muốn lưu). Trong trường hợp của một trò chơi theo phong cách Mega Man, bạn có thể theo dõi những con trùm cấp độ cuối cùng mà bạn đã giết, số lượng sức mạnh giống như xe tăng năng lượng mà bạn có, v.v.

Gói tất cả dữ liệu đó vào một trường bit, nghĩa là gán một số bit thích hợp cho mỗi giá trị:

  • Giết ông chủ 1 (một bit)
  • Giết ông chủ 2 (một bit)
  • Giết ông chủ 3 (một bit)
  • Giết ông chủ 4 (một bit)
  • Bể năng lượng ( x tổng cộng 5) (3 bit)
  • Mở khóa một số thành tích (một bit)

Ví dụ của chúng tôi có tổng cộng 8 bit, có nghĩa là một ký tự đơn có thể biểu thị mật khẩu. Trong thực tế, trò chơi của bạn có thể có nhiều trạng thái hơn và do đó đòi hỏi tổng số bit nhiều hơn và do đó nhiều nhân vật hơn. Như đã lưu ý trong các nhận xét ở đây và các nơi khác trong câu hỏi này, phương pháp này hoạt động cho các trò chơi "retro" hoặc các trò chơi khác trong đó quy mô của trạng thái trò chơi bị bắt là hợp lý. Ngoài một điểm nào đó, bạn có thể phát hiện ra rằng độ phức tạp của mật khẩu cần thiết để mã hóa trạng thái của bạn là quá lớn.

Để giảm khả năng quan sát ngẫu nhiên bẻ khóa mật khẩu, bạn có thể chuyển đổi bố cục bit để bạn giới thiệu các bit giả (không ảnh hưởng đến trạng thái trò chơi nhưng làm cho mật khẩu trông khác khi bạn diễn giải tất cả các bit dưới dạng ký tự) hoặc chạy nó thông qua một số thao tác giống như hàm băm có thể đảo ngược để xáo trộn các bit xung quanh sao cho tất cả các bit " hộp bị giết X " không nằm ngay cạnh nhau, làm cho mật khẩu trạng thái tuần tự tương ứng trông rất khác nhau hoặc đưa ra các giá trị tổng kiểm tra.

Nếu bạn tìm hiểu kỹ, sẽ có một chút thông tin về các hệ thống được sử dụng cho một số trò chơi mật khẩu phổ biến hơn hiện có:

Bạn có thể đọc những thứ đó để có thêm cảm hứng.


4
Hãy nhớ đảm bảo rằng mật khẩu "trạng thái lưu" hoàn toàn có thể gõ dễ dàng và tốt nhất là không rõ ràng (ví dụ: sử dụng '0' hoặc 'O' nhưng không phải cả hai).
minnmass

4
@minnmass điểm thưởng nếu bạn ngầm chuyển đổi các ký tự tương tự thành tiêu chuẩn của mình, để gõ 'O' thay vì '0' vẫn dịch thành '0'.

8
@ NPSF3000 Bởi vì trong trường hợp này, "mật khẩu" không phải là biện pháp xác thực; "mật khẩu" là phương tiện lưu trữ.
Schilcote

6
@ NPSF3000 nếu bạn không rõ ràng với câu hỏi thì bạn cần đọc lại câu hỏi hoặc tìm hiểu tài liệu nền.
Hobbs

2
@ NPSF3000 OP nói rõ ràng "Phong cách retro" và tham khảo Megaman để xác nhận, điều này không mơ hồ. Tìm hiểu về vấn đề này, hiểu rằng điều này không liên quan đến bảo mật và xin vui lòng ngừng cố gắng bảo vệ những gì bắt đầu như một sự thiếu hiểu biết trung thực và có thể tha thứ.
MickLH

3

Những trò chơi đó chỉ cứu một bang mà tôi tin. Mật khẩu chỉ tham chiếu một mức để tải. Chỉ cần sử dụng một từ điển cho một cái gì đó như thế này.

Nếu nó phức tạp hơn một chút như có một vũ khí hoặc bộ tăng cường nhất định, bạn có thể mã hóa trạng thái thành mã băm ngắn (nhưng đủ dài).

Nhưng tôi thực sự khuyên bạn không nên sử dụng điều này. Mật khẩu sẽ lan truyền nhanh trên Internet và chẳng mấy chốc mọi người đã thắng trò chơi của bạn.


9
Mật khẩu lan truyền trên internet có thể tốt. Gian lận có thể thú vị, và trong một trò chơi một người chơi, người chơi chỉ tự lừa dối mình.
Anko

@Anko Vâng, tôi không thích gian lận và hầu như không làm điều đó nên tôi thiên vị. Nhưng từ kinh nghiệm của bản thân, các trò chơi của tôi sẽ thu thập bụi nhanh hơn và sớm hơn khi tôi gian lận theo cách của mình.
Madmenyo

"... chỉ tham chiếu một cấp độ để tải." Không đúng trong mọi trường hợp cho đến nay. Một số mật khẩu cũng tham chiếu các ông chủ, bị giết, tăng sức mạnh, v.v. Thứ hai, khuyên rằng mật khẩu có thể được lan truyền là một điều - một vấn đề trong thế giới siêu kết nối của chúng tôi. Nói rằng các lựa chọn gian lận nên được loại bỏ bởi vì BẠN không thích gian lận là một cách khác. Những gì bạn thích không chính xác là những gì người khác thích. Nó không phải là những gì bạn thích, đó là người tiêu dùng . Gian lận / phím tắt là một lựa chọn quan trọng - đặc biệt đối với các trò chơi một người chơi.
WernerCD

@WernerCD trước tiên tôi nói về các hệ thống phức tạp hơn Tôi chỉ bắt đầu với một hệ thống mật khẩu đơn giản. Tôi KHÔNG yêu cầu bất cứ điều gì. Thứ hai, tôi không nói gì về việc gian lận trong câu trả lời. Tôi chỉ đưa ra câu trả lời BIASED của mình trên một bình luận và thậm chí nói rằng tôi thiên vị và nhận thức được quan điểm của bạn rằng đó không phải là điều tôi thích. Nhưng nếu không ai nói những gì anh ấy thích hoặc không thích, làm sao bạn biết người khác thích gì? Tôi vẫn nghĩ rằng một hệ thống như thế là do thời gian và gian lận thế kỷ 21 đạt được khác nhau. Lần tới bạn nên đọc kỹ hơn trước khi viết bình luận như vậy IMHO.
Madmenyo

Nếu bạn có savegame, mọi người cũng sẽ chia sẻ savegame.
Dewi Morgan

1

Vâng, về cơ bản bạn có thể làm theo cách này:

Sếp bị giết = 7

Số lượng tiền = 36

Sở hữu Kiếm = 0 (Không)

Sở hữu trái tim = 1 (Có)

Cấp độ hiện tại = 6

Thế giới hiện tại = 9

Sức khỏe = 100

Mã = 7V36R0A1T6O9A100

Về cơ bản mỗi chữ cái riêng biệt Các loại


-3

Mặc dù các giải pháp như hệ thống nhân vật của Josh Petrie có lợi ích (kích thước tiết kiệm nhỏ, hoạt động trên tất cả các bản sao của trò chơi), nhưng chúng kết hợp thiết kế trò chơi và hệ thống trạng thái thực chất với hệ thống mật khẩu. Mọi thay đổi về mật khẩu hoặc trạng thái hoặc thiết kế và toàn bộ hệ thống đều sụp đổ.

Một giải pháp đơn giản hơn nhiều sẽ là xây dựng hệ thống lưu của bạn như bình thường và chỉ cần thêm một hệ thống mật khẩu trên đầu trang. Điều này có thể đơn giản như lưu mật khẩu trong lưu (có thể nhân đôi tên tệp) và xác thực nó khi tải hoặc phức tạp như sử dụng một trong nhiều thư viện mã hóa xung quanh (khá đơn giản).


Dường như có một số nhầm lẫn xung quanh câu trả lời này.

1) Các op chỉ đơn giản là yêu cầu mật khẩu cho phép họ tải lưu ... không có yêu cầu nào là mật khẩu phải được lưu.

2) Nhiều trò chơi ngày nay có yêu cầu lưu trữ đáng kể, chúng tôi chỉ xây dựng một hệ thống lưu / tải nhanh bên trong đang tạo ra các tệp 10MB ... cho một trò chơi đố! Hệ thống lưu của Josh Petrie , trong khi hợp lệ là rất hạn chế - ngay khi hệ thống cửa hàng trở nên không tầm thường, mật khẩu sẽ phải có độ dài rất lớn để duy trì tất cả dữ liệu thích hợp.

Ví dụ, điều gì xảy ra nếu có 30 ông chủ? 20 thành tích? Có phải chúng ta đang đi được một nửa? Anh ấy ở cấp độ nào? Có bao nhiêu bit chúng ta đang dành cho sức khỏe, cuộc sống, tiền xu, xp? Điều gì sẽ xảy ra nếu ảnh chụp không phải là trạng thái giữa các cấp ... mà là một nửa trong một cấp - vị trí của người chơi, kẻ thù, đạn, địa hình bị phá hủy / thay đổi đột nhiên thêm vào rất nhiều trạng thái cần được lưu trữ.

Đối với phối cảnh, giả sử một bảng chữ cái 30 ký tự và mật khẩu mười chữ cái, chúng ta có khoảng 50 bit thông tin để lưu trữ. Không có gì lạ khi thấy một trò chơi / công cụ sử dụng tới 320 bit chỉ để lưu trữ vị trí, xoay và chia tỷ lệ của một đối tượng. Chắc chắn, bạn có thể thực hiện tất cả các loại thủ thuật tối ưu hóa để làm được nhiều hơn với ít hơn ... nhưng cuối cùng bạn đang sử dụng hết thời gian để làm cho trò chơi trở nên thú vị - một trong những tối ưu hóa tồi tệ nhất bạn có thể thực hiện.


3
Tôi nghĩ vấn đề ở đây, và với nhận xét của bạn ở trên, đó là bảo mật mật mã không phải là mục tiêu lưu trạng thái của trò chơi dưới dạng các bit trong mật khẩu. Mật khẩu được sáng tác theo cách như vậy rất dễ đảo ngược nhưng khó đoán băm , và không có gì hơn. Và vì lý do tương tự, nó không gây ra sự ghép đôi quá mức theo cách bạn đang tưởng tượng; nếu trạng thái trò chơi trở nên phức tạp hơn hoặc ít hơn, thì hàm băm (không làm mất hiệu lực băm trước đó), nhưng hệ thống hoạt động tốt như nhau trước và sau.
Seth Battin

@Seth Battin "nó không gây ra sự ghép đôi quá mức theo cách bạn đang tưởng tượng" Ôi tuyệt quá! Vì vậy, một trò chơi tôi đang làm việc ngay bây giờ có một tệp lưu được đo bằng megabyte ... tất cả những gì tôi cần làm là thực hiện một số thao tác cơ bản và hiển thị nó trên màn hình và voila! Bây giờ chúng ta có một hệ thống mật khẩu hoàn toàn tốt?
NPSF3000

3
Có vẻ như trò chơi của bạn không phù hợp với phương pháp này.
Seth Battin

@ NPSF3000 Điểm mật khẩu trong trường hợp này là gì? Nếu đó là để ngăn người khác sử dụng cùng một máy sử dụng các trò chơi lưu trữ của họ mà không được phép, tại sao bạn không đăng nhập một lần cho mỗi trò chơi với tên người dùng / thẻ? Nếu đó là để chỉ định lưu nào họ muốn, thì đó là "id lưu trò chơi", không phải mật khẩu và có thể sẽ được làm cho thân thiện hơn. Như vậy, nếu tôi đọc đúng bạn, bạn đang yêu cầu một mật khẩu khác, không do người dùng chỉ định mỗi khi họ tải một bản lưu mới? TẠI SAO? Lợi thế hữu ích nào mang lại cho bất cứ ai?
Dewi Morgan

1
@DewiMorgan Tôi không yêu cầu bất cứ điều gì, tôi hoàn toàn đưa ra câu trả lời cho câu hỏi của op: "Làm cách nào để tạo hệ thống mật khẩu cho trò chơi một người chơi? Ví dụ: Mega Man X tiết kiệm công việc bằng cách cung cấp cho bạn một loạt số bạn có thể nhập sau để tải khoản tiết kiệm của mình. " Giải pháp của tôi làm điều đó, mà không cần ghép hệ thống lưu và hệ thống mật khẩu với nhau. Câu trả lời được bình chọn hàng đầu có những nhược điểm giống như của tôi, với việc bổ sung rằng nó yêu cầu toàn bộ trò chơi phải được thiết kế phù hợp với phương pháp.
NPSF3000
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.