레트로 스타일의 비밀번호 기반 "저장 게임"시스템을 어떻게 구현합니까?


20

구형 콘솔 게임에서 사용되는 것과 같은 싱글 플레이어 게임의 암호 시스템을 어떻게 만들 수 있습니까?

예를 들어, Mega Man X 는 저장을로드하기 위해 나중에 입력 할 수있는 일련의 숫자를 제공하여 작업을 저장합니다.


3
Donkey Kong (NES)이 한 일을하지 마십시오. 카트리지를 절약 할 수는 있지만 생활 횟수는 유지하지 않습니다. 따라서 첫 번째 레벨 (24와 같은)부터 많은 생명을 구할 수 있습니다. 3으로 올라가서
Alec Teal

10
Pedantic note : 암호 시스템 은 게임 상태를 저장하지 않으며 사전 정의 된 상태를로드합니다 .
Lilienthal

5
@Lilienthal이 반드시 그런 것은 아닙니다. 어쩌면 그것은 결정적인 양방향 알고리즘으로 뒤섞인 일부 변수 상태의 일종의 "덤프"일 수도 있습니다.
o0 '.

2
@Lohoris 예, 암호에 엔트로피가 충분하면 현재 저장 게임과 비슷하게 저장된 상태라고 생각할 수 있습니다. 결국, 둘 다 게임 상태를 내보내고 가져 오는 방법이 필요합니다. 그러나 실제 저장과 유사한 항목 (정확한 위치 / 체크 포인트, 생명, 살해 한 적, 탄약 수 등)에 필요한 엔트로피에는 매우 긴 암호와 매우 복잡한 알고리즘이 필요합니다. savegames에 암호를 사용하기로 결정한 경우 (있는 경우), 최대 값을 유지해야합니다.
Lilienthal

3
@AlecTeal "멍청한"정확히 누구? 현대 게임에 저장된 데이터의 양에 대해 암호를 평가하고 있습니다. 대부분의 데이터에는 적합하지 않습니다.
Lilienthal

답변:


32

먼저 게임 상태 (또는 저장하려는 상태의 측면)를 분석하십시오. Mega Man 스타일 게임의 경우, 당신이 죽인 최종 레벨 보스 중 어떤 것이, 당신이 가지고있는 에너지 탱크와 같은 파워 업의 수 등을 추적 할 수 있습니다.

모든 데이터를 비트 필드에 압축합니다. 즉, 각 값에 적절한 비트 수를 지정하십시오.

  • 죽인 보스 1 (1 비트)
  • 죽인 보스 2 (1 비트)
  • 죽인 보스 3 (1 비트)
  • 죽인 보스 4 (1 비트)
  • 에너지 탱크 ( 총 5 x ) (3 비트)
  • 일부 업적 달성 (1 비트)

이 예에는 총 8 비트가 있으며 이는 단일 문자가 비밀번호를 나타낼 수 있음을 의미합니다. 실제로는 게임 상태가 더 높을 수 있으므로 더 많은 총 비트와 더 많은 캐릭터가 필요합니다. 이 질문의 다른 곳에서 언급 한 것처럼이 방법은 "레트로"게임 또는 캡처 된 게임 상태의 크기가 적당한 다른 게임에 적용됩니다. 특정 지점을 넘어 서면 상태를 인코딩하는 데 필요한 암호의 복잡성이 너무 크다는 것을 알 수 있습니다.

일시적인 관찰로 암호가 깨질 가능성을 줄이려면 비트 레이아웃을 변형하여 더미 비트 (게임 상태에는 영향을 미치지 않지만 모든 비트를 문자로 해석 할 때 암호가 다르게 보이도록)를 실행하거나 실행할 수 있습니다. 가역적 인 해시와 같은 작업을 통해 비트를 스크램블하여 모든 "killed box X "비트가 서로 바로 옆에 있지 않으므로 해당 순차 상태 암호가 매우 다르게 보이거나 체크섬 값이 발생합니다.

둘러 보면 더 인기있는 암호 게임에 사용되는 시스템에 대한 약간의 정보가 있습니다.

더 많은 영감을 얻기 위해 그것들을 읽을 수 있습니다.


4
"저장 상태"비밀번호는 모두 쉽게 입력 할 수 있고, 바람직하게는 모호하지 않아야합니다 (예 : '0'또는 'O'를 사용하지만 둘 다 사용하지는 마십시오).
minnmass

4
@minnmass 보너스 문자를 유사한 문자를 암시 적으로 표준으로 변환하면 '0'대신 'O'를 입력해도 여전히 '0'으로 변환됩니다.

8
@ NPSF3000이 경우 "비밀번호"는 인증 수단이 아니기 때문에; "암호"는 저장 매체 자체입니다.
Schilcote

6
@ NPSF3000 질문에서 명확하지 않은 경우 질문을 다시 읽거나 배경 자료를 배워야합니다.
hobbs

2
@ NPSF3000 OP는 명확하게 "레트로 스타일"이라고 말하고 Megaman을 참조하여 확인합니다. 주제에 대해 배우고, 이것이 보안과 관련이 없음을 이해하고, 정직하고 용서할 수있는 무지에서 시작된 것을 방어하려고 노력하지 마십시오.
MickLH

3

그 게임은 내가 믿는 상태를 구할뿐이었습니다. 비밀번호는로드 할 레벨을 참조합니다. 이런 식으로 사전을 사용하십시오.

특정 무기 나 부스터를 갖는 것과 같이 조금 더 복잡한 경우 상태를 짧은 (그러나 충분히 긴) 해시 코드로 암호화 할 수 있습니다.

그러나 나는 이것을 사용하지 말 것을 강력히 권합니다. 인터넷에서 암호가 빨리 퍼지고 곧 모든 사람이 게임에서 승리했습니다.


9
인터넷에 퍼지는 암호가 좋습니다. 부정 행위는 재미있을 수 있으며 싱글 플레이어 게임에서는 플레이어가 자신을 속이는 것만 가능합니다.
Anko

@Anko 그래, 나는 부정 행위를 싫어하고 간신히 편견이있어 편견이 있었다. 그러나 내 자신의 경험을 통해 내 게임은 여물통을 부정 할 때 더 빠르고 더 빨리 먼지를 모을 것입니다.
Madmenyo

"... 그냥로드 수준을 참조하십시오." 모든 경우에 사실이 아닙니다. 일부 암호는 보스, 킬, 파워 업 등을 참조합니다. 둘째, 암호가 확산 될 수 있다는 조언은 하이퍼 커넥 티드 세계의 문제입니다. 부정 행위가 마음에 들지 않기 때문에 부정 행위 옵션을 제거해야한다고 말하는 것이 또 다른 문제입니다. 당신이 좋아하는 것은 다른 사람들이 좋아하는 것이 아닙니다. 그것은 당신이 좋아하는 것이 아니라 소비자 입니다. 부정 행위 / 바로 가기는 특히 싱글 플레이어 게임에서 중요한 옵션입니다.
WernerCD

@WernerCD는 먼저 단순한 암호 시스템으로 시작하는 더 복잡한 시스템에 대해 이야기합니다. 나는 아무 것도 주장하지 않습니다. 둘째, 나는 대답에서 부정 행위에 대해 아무 말도하지 않습니다. 나는 단지 BIASED에게 의견에 대한 답장을주고 심지어 내가 편견이 아니며 그것이 내가 좋아하지 않는 요점을 알고 있다고 말하고있다. 그러나 아무도 그가 좋아하거나 싫어하는 것을 말하지 않으면 다른 사람들이 무엇을 좋아하는지 어떻게 알 수 있습니까? 나는 여전히 그런 시스템이 시간이 지남에 따라 21 세기 속임수가 다르게 달성된다고 생각합니다. 다음에 IMHO와 같은 의견을 작성하기 전에 더 자세히 읽어야합니다.
Madmenyo

세이브 게임이있는 경우 사람들도 세이브 게임을 공유합니다.
Dewi Morgan

1

기본적으로 다음과 같이 할 수 있습니다.

보스 살해 = 7

동전 = 36

자신의 검 = 0 (아니요)

자신의 심장 = 1 (예)

현재 레벨 = 6

현재 세계 = 9

건강 = 100

코드 = 7V36R0A1T6O9A100

기본적으로 모든 문자는 별도 유형


-3

Josh Petrie의 문자 대 상태 시스템 과 같은 솔루션 에는 이점 (작은 저장 크기, 모든 게임 사본에서 작동)이 있지만 게임 디자인 및 상태 시스템은 본질적으로 암호 시스템에 결합됩니다. 암호 나 상태 또는 디자인 및 시스템 전체에 대한 변경 사항은 모두 다릅니다.

훨씬 간단한 해결책은 평소대로 저장 시스템을 구축하고 상단에 암호 시스템을 추가하는 것입니다. 이것은 저장에 암호를 저장하고 (파일 이름으로 두 배가 될 수 있음)로드시 ​​암호를 검증하는 것만 큼 간단하거나 주위에 많은 암호화 라이브러리 중 하나를 사용하는 것만 큼 간단합니다.


이 답변에 혼란이있는 것 같습니다.

1) 작전은 단순히 저장을로드 할 수있는 암호를 요청했습니다 ... 암호 저장 필요는 없습니다 .

2) 오늘날 많은 게임에는 상당한 저장 용량이 필요합니다. 퀴즈 게임을 위해 10MB 파일을 생성하는 내부에 빠른 저장 /로드 시스템을 구축했습니다! Josh Petrie의 저장 시스템은 유효하지만 매우 제한적입니다. 즉, 저장 시스템이 중요하지 않은 즉시 모든 관련 데이터를 유지하려면 암호의 길이가 엄청나게 길어야합니다.

예를 들어 보스가 30 명이면 어떻게됩니까? 20 개의 업적? 우리는 업적을 절반 쯤 밟고 있습니까? 그는 몇 레벨입니까? 우리는 건강, 생명, 동전, XP를 위해 몇 비트를 따로두고 있습니까? 스냅 샷이 레벨 사이에 있지 않지만 레벨을 반쯤지나 가면 어떻게됩니까? 플레이어, 적, 발사체, 파괴 / 변경 지형의 위치가 갑자기 저장해야하는 많은 상태에 추가됩니다.

참고로 30 자 알파벳과 10 자 암호를 가정하면 약 50 비트의 정보를 저장할 수 있습니다. 게임 / 엔진이 단일 객체의 위치, 회전 및 스케일링을 저장하기 위해 최대 320 비트를 사용하는 것은 드문 일이 아닙니다. 물론, 적은 비용으로 더 많은 일을하기 위해 모든 종류의 최적화 트릭을 수행 할 수 있지만 궁극적으로 게임을 재미있게 만드는 데 전념하는 시간을 낭비하고 있습니다.


3
여기서 문제는 위의 의견과 함께 암호 보안이 게임 상태를 암호 내 비트로 저장하는 목표가 아니라는 것입니다. 이러한 방식으로 구성된 암호는 쉽게 되돌릴 수 있지만 해시 를 추측하기는 어렵습니다 . 같은 이유로, 당신이 상상하는 방식으로 과도한 결합을 일으키지 않습니다. 게임 상태가 다소 복잡해지면 해시 (이전 해시를 무효화 함)도 비슷하지만 시스템은 전후에 똑같이 잘 작동합니다.
Seth Battin

@Seth Battin "당신이 상상하는 방식으로 과도한 결합을 일으키지 않습니다"오 멋지다! 그래서 내가 지금하고있는 게임은 메가 바이트 단위로 저장 파일을 측정했습니다 ... 내가해야 할 일은 기본 난독 화를 수행하고 화면과 짜잔에 표시하는 것입니다! 우리는 이제 완벽하게 좋은 암호 시스템을 가지고 있습니까?
NPSF3000

3
게임이이 방법에 적합하지 않은 것 같습니다.
Seth Battin

@ NPSF3000이 경우 암호의 요점은 무엇입니까? 같은 컴퓨터를 사용하는 다른 사람이 무단으로 자신의 세이브 게임을 사용하지 못하게하려면, 사용자 이름 / 패스로 게임당 한 번만 로그인하면 어떨까요? 원하는 저장을 지정하려면 암호가 아니라 "저장된 게임 ID"이므로 친숙해 져야합니다. 그대로 읽으면 새 저장을로드 할 때마다 사용자가 지정하지 않은 다른 암호가 필요합니까? 왜? 그것은 누구에게 어떤 유용한 이점을 주나요?
Dewi Morgan

1
@DewiMorgan 나는 아무것도 요구하지 않고 순수하게 op의 질문에 대한 답변을 제공합니다. "단일 플레이어 게임을위한 암호 시스템을 어떻게 만들 수 있습니까? 예를 들어 Mega Man X는 일련의 숫자를 제공하여 작업을 저장합니다. 나중에 입력하여 저장을로드 할 수 있습니다. " 저의 솔루션은 저장 시스템과 암호 시스템을 함께 연결하지 않고 그렇게합니다. 가장 많이 투표 된 답변은 내 것과 같은 단점을 가지고 있으며 전체 게임을 방법에 맞게 디자인해야합니다.
NPSF3000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.