구형 콘솔 게임에서 사용되는 것과 같은 싱글 플레이어 게임의 암호 시스템을 어떻게 만들 수 있습니까?
예를 들어, Mega Man X 는 저장을로드하기 위해 나중에 입력 할 수있는 일련의 숫자를 제공하여 작업을 저장합니다.
구형 콘솔 게임에서 사용되는 것과 같은 싱글 플레이어 게임의 암호 시스템을 어떻게 만들 수 있습니까?
예를 들어, Mega Man X 는 저장을로드하기 위해 나중에 입력 할 수있는 일련의 숫자를 제공하여 작업을 저장합니다.
답변:
먼저 게임 상태 (또는 저장하려는 상태의 측면)를 분석하십시오. Mega Man 스타일 게임의 경우, 당신이 죽인 최종 레벨 보스 중 어떤 것이, 당신이 가지고있는 에너지 탱크와 같은 파워 업의 수 등을 추적 할 수 있습니다.
모든 데이터를 비트 필드에 압축합니다. 즉, 각 값에 적절한 비트 수를 지정하십시오.
이 예에는 총 8 비트가 있으며 이는 단일 문자가 비밀번호를 나타낼 수 있음을 의미합니다. 실제로는 게임 상태가 더 높을 수 있으므로 더 많은 총 비트와 더 많은 캐릭터가 필요합니다. 이 질문의 다른 곳에서 언급 한 것처럼이 방법은 "레트로"게임 또는 캡처 된 게임 상태의 크기가 적당한 다른 게임에 적용됩니다. 특정 지점을 넘어 서면 상태를 인코딩하는 데 필요한 암호의 복잡성이 너무 크다는 것을 알 수 있습니다.
일시적인 관찰로 암호가 깨질 가능성을 줄이려면 비트 레이아웃을 변형하여 더미 비트 (게임 상태에는 영향을 미치지 않지만 모든 비트를 문자로 해석 할 때 암호가 다르게 보이도록)를 실행하거나 실행할 수 있습니다. 가역적 인 해시와 같은 작업을 통해 비트를 스크램블하여 모든 "killed box X "비트가 서로 바로 옆에 있지 않으므로 해당 순차 상태 암호가 매우 다르게 보이거나 체크섬 값이 발생합니다.
둘러 보면 더 인기있는 암호 게임에 사용되는 시스템에 대한 약간의 정보가 있습니다.
더 많은 영감을 얻기 위해 그것들을 읽을 수 있습니다.
그 게임은 내가 믿는 상태를 구할뿐이었습니다. 비밀번호는로드 할 레벨을 참조합니다. 이런 식으로 사전을 사용하십시오.
특정 무기 나 부스터를 갖는 것과 같이 조금 더 복잡한 경우 상태를 짧은 (그러나 충분히 긴) 해시 코드로 암호화 할 수 있습니다.
그러나 나는 이것을 사용하지 말 것을 강력히 권합니다. 인터넷에서 암호가 빨리 퍼지고 곧 모든 사람이 게임에서 승리했습니다.
Josh Petrie의 문자 대 상태 시스템 과 같은 솔루션 에는 이점 (작은 저장 크기, 모든 게임 사본에서 작동)이 있지만 게임 디자인 및 상태 시스템은 본질적으로 암호 시스템에 결합됩니다. 암호 나 상태 또는 디자인 및 시스템 전체에 대한 변경 사항은 모두 다릅니다.
훨씬 간단한 해결책은 평소대로 저장 시스템을 구축하고 상단에 암호 시스템을 추가하는 것입니다. 이것은 저장에 암호를 저장하고 (파일 이름으로 두 배가 될 수 있음)로드시 암호를 검증하는 것만 큼 간단하거나 주위에 많은 암호화 라이브러리 중 하나를 사용하는 것만 큼 간단합니다.
이 답변에 혼란이있는 것 같습니다.
1) 작전은 단순히 저장을로드 할 수있는 암호를 요청했습니다 ... 암호 가 저장 될 필요는 없습니다 .
2) 오늘날 많은 게임에는 상당한 저장 용량이 필요합니다. 퀴즈 게임을 위해 10MB 파일을 생성하는 내부에 빠른 저장 /로드 시스템을 구축했습니다! Josh Petrie의 저장 시스템은 유효하지만 매우 제한적입니다. 즉, 저장 시스템이 중요하지 않은 즉시 모든 관련 데이터를 유지하려면 암호의 길이가 엄청나게 길어야합니다.
예를 들어 보스가 30 명이면 어떻게됩니까? 20 개의 업적? 우리는 업적을 절반 쯤 밟고 있습니까? 그는 몇 레벨입니까? 우리는 건강, 생명, 동전, XP를 위해 몇 비트를 따로두고 있습니까? 스냅 샷이 레벨 사이에 있지 않지만 레벨을 반쯤지나 가면 어떻게됩니까? 플레이어, 적, 발사체, 파괴 / 변경 지형의 위치가 갑자기 저장해야하는 많은 상태에 추가됩니다.
참고로 30 자 알파벳과 10 자 암호를 가정하면 약 50 비트의 정보를 저장할 수 있습니다. 게임 / 엔진이 단일 객체의 위치, 회전 및 스케일링을 저장하기 위해 최대 320 비트를 사용하는 것은 드문 일이 아닙니다. 물론, 적은 비용으로 더 많은 일을하기 위해 모든 종류의 최적화 트릭을 수행 할 수 있지만 궁극적으로 게임을 재미있게 만드는 데 전념하는 시간을 낭비하고 있습니다.