이 저장소에는 Pokemon Platinum을 이길 수 있는 입력 목록이 포함되어 있습니다. 기술과 시뮬레이션을 결합하여 게임 진행이 보장됩니다. RNG 조작이 필요하지 않고, 프레임에 맞는 입력이 필요하지 않으며, 입력 순서는 게임 내 상황에 관계없이 정적이고 변하지 않습니다.
여기에서 시뮬레이터 코드를 찾을 수 있습니다.
입력은 commands
디렉터리에서 찾을 수 있습니다. 각 파일은 게임의 서로 다른 부분에 해당하며 각각 1부터 9까지 서로 흐릅니다. 테스트를 위해 게임의 메모리를 변경하는 도우미 파일과 플레이하는 동안 입력을 기록하는 파일도 있습니다.
각 명령 파일에는 [
형식의 명령 목록이 포함되어 있습니다. 여기서 첫 번째 값은 수행할 명령이고 두 번째 값은 해당 명령을 보관할 프레임 수입니다. 명령이 일련의 버튼 누르기인 경우
수행할 해당 명령의 반복 횟수를 나타냅니다.
기본 명령은 다음과 같습니다.
명령 | 설명 |
---|---|
에이 | 에이 |
비 | 비 |
uf | 위로 |
df | 아래에 |
lf | 왼쪽 |
RF | 오른쪽 |
성 | 시작 |
엑스 | 엑스 |
와이 | 와이 |
어브 | 위로 + B |
디비 | 아래 + B |
파운드 | 왼쪽 + B |
rb | 오른쪽 + B |
승 | 기다리다 |
선택, L, R과 같은 다른 버튼은 사용되지 않습니다.
명령 파일에서는 이러한 기본 버튼 누르기 세트를 나타내기 위해 추가 명령이 사용됩니다. 예를 들어, A를 10번 누르려면 A 버튼을 60프레임 동안 길게 누르는 10개의 명령을 연속해서 사용하는 대신 {'press_a', 10}
약칭으로 사용합니다.
또한 각 파일은 메모리 메일 처리, 표준 전투 작업 수행, 반복해야 하는 게임 섹션 탐색과 같은 다양한 루틴을 수행하는 최대 12개의 사용자 정의 명령을 정의합니다.
l
, r
, u
및 d
명령은 한 방향으로 한 단계 이동하는 명령이고 lf
, rf
, uf
및 df
특정 수의 프레임 동안 방향 버튼을 누르는 명령입니다.
명령을 직접 작성하는 대신 시퀀스를 수정하거나 새 시퀀스를 생성하려는 경우 bizhawk 에뮬레이터와 함께 recordInputs
파일을 사용하여 입력을 기록한 다음 다음에서 사용할 수 있는 형식으로 출력할 수 있습니다. 스크립트.
입력을 기록하려면 먼저 컨트롤러 단축키를 지워야 합니다. 즉, 에뮬레이터가 입력을 명령으로 직접 사용하지 못하도록 해야 합니다. Config -> Controllers -> Misc -> Clear
를 통해 이 작업을 수행할 수 있습니다. 나중에 동일한 메뉴에서 Misc -> Load Defaults
사용하여 단축키를 다시 로드할 수 있습니다.
그런 다음 Tools -> Lua Console -> Script -> Open Script
통해 lua 콘솔을 열어야 합니다. 여기서 recordInputs.lua
스크립트를 엽니다. 스크립트가 실행되기 시작하면 입력 내용이 기록됩니다.
버튼 단축키는 recordInputs.lua
파일에 나열되어 있지만 가장 중요한 두 가지는 녹음이 완료되면 형식화된 명령 목록을 출력하는 lshift
와 60프레임 대기 시간 명령을 추가하는 rshift
입니다. 입력 레코더는 유휴 시간을 기록하지 않습니다. 즉, rshift
사용하여 대기 시간을 추가하지 않으면 중단 없이 빠르게 명령을 하나씩 실행하게 됩니다.
이로 인해 입력의 출력 목록과 플레이할 때 실제로 수행한 작업이 달라집니다. 대기 시간을 추가하는 것을 잊어버리기 쉬우므로 재생할 때 문제가 발생할 수 있습니다. 그러나 장점으로는 타이머에 입력을 기록해야 한다는 부담이 없습니다.
다른 키는 에뮬레이터의 기본값, 이동을 위한 화살표 키, x
, z
, s
a
A
, B
, X
, Y
, 시작을 위한 enter
와 일치합니다.
게임 시작 시 필수 입력인 터치 컨트롤에 약간의 변동성이 있을 수 있습니다. 앞으로 나아가려면 화면 중앙을 탭하여 포켓볼 중앙을 쳐야 합니다. 이는 비표준 아날로그 입력이며 코드에서 touch_middle
로 표시됩니다. 이는 한 번만 발생합니다.
입력 내용이 내가 인식하지 못하거나 확인하려고 생각하지 않은 사항을 설명하지 못할 가능성도 있습니다. 이 인적 오류는 문제와 버그에 대한 순서를 몇 번이나 확인하고 다시 확인했는지에 관계없이 항상 존재합니다.
포켓몬은 대부분의 난수를 생성하기 위해 LCRNG(선형 합동 난수 생성기)를 사용합니다. 이는 충분히 무작위로 나타나는 일련의 숫자를 만든 다음 한 번에 하나씩 시퀀스를 진행하여 "무작위" 숫자를 생성하는 방식으로 작동합니다.
4세대 포켓몬 게임은 난수를 순환하지 않고 필요할 때만 난수를 사용한다는 점에서 전작과 다릅니다.
예를 들어, 루비/사파이어/에메랄드에서 게임은 게임에서 아무 일도 일어나지 않더라도 매 프레임마다 일련의 난수를 진행하며, 게임에서 요청할 때 현재 있는 숫자를 생성합니다.
Diamond/Pearl/Platinum에서 난수 생성기는 게임에서 값을 요청할 때까지 정적으로 유지됩니다. 즉, 게임의 빈 공간에 서 있으면 난수 생성기는 아무 작업도 수행하지 않습니다.
주어진 작업(예: 동전 뒤집기)에 대해 난수 생성기의 가능한 모든 결과를 시뮬레이션하는 경우 Gen 4 게임에서 이 결과는 타이밍에 관계없이 결정적입니다(빈 공간 또는 "조용한" 영역에 있다고 가정).
Gen 3 게임에서 이 결과는 결정적이지 않으며 타이밍에 따라 다릅니다. 즉, 지금 동전을 뒤집으면 2초 후에 뒤집을 때와 다른 결과가 나올 수 있습니다.
우리의 목적을 위해 Gen 4 게임의 이러한 품질은 인간 플레이어가 게임을 플레이하기 위해 이 입력 목록을 사용하더라도 인간 플레이어가 정확한 시간에 입력을 수행하지 않기 때문에 여전히 제대로 작동하도록 만듭니다. 버튼을 조금 일찍 누르거나 조금 늦게 누르세요. 버튼을 너무 일찍 누르지 않는 한, 게임 결과에 아무런 영향을 주지 않고 버튼을 무한정 지연시킬 수 있습니다(마침내 버튼을 누른다고 가정).
이 원리를 사용하여 Pokemon Platinum의 난수 시퀀스에서 가능한 40억 개의 시드 또는 시작 위치를 모두 시뮬레이션하면 가능한 모든 게임에서 어떤 일이 일어날지 예측할 수 있습니다. 예를 들어, 동전을 100번 던지면 결정적인 수의 결과가 나옵니다. 이를 모두 확인함으로써 최악/최상의 시나리오를 발견할 수 있으며, 이 경우에는 80/20 분할입니다.
동전 뒤집기의 경우 이 프로세스는 수학을 사용하여 간단한 통계를 사용하여 기대값을 결정하는 것과 매우 유사합니다. 포켓몬 전투와 같은 더 복잡한 일의 경우 수학을 사용하여 결과를 결정하는 것이 훨씬 더 어려워집니다. 치명타, 미스, 데미지 롤, AI rng, 2차 효과 확률 등이 주어진 확률을 계산하는 것보다 40억 가지 가능성을 모두 시뮬레이션하는 것이 더 쉽습니다.
이렇게 하면 가능한 모든 게임에서 어떤 전략이 승리하는지에 대한 통찰력을 얻을 수 있으며, 수학적으로 실패하거나 패배할 가능성이 있더라도 100% 확실하게 다른 트레이너를 물리칠 수 있습니다.
최종 결과는 잘못된 입력이나 버그를 제외하고 실패의 가능성 없이 플래티넘의 모든 게임을 처음부터 끝까지 이겨야 하는 일련의 입력입니다.