난수조절

비디오 게임에서 연산에 따라 생성되는 의사난수를 조절하려고 시도, 혹은 조절하고 있다고 믿는 행위. 난수 조정이라고도 한다.
실제로 행해지는 수단들을 감안하면, 엄밀히 말하자면 시드 조절, 혹은 시드 통제 시도행위라고 볼 수 있다.

1 개요

게임에서는 상황에 따라 어떤 커맨드를 입력하거나 할 때 그 결과가 무작위적으로 나오거나 특정한 확률 내에서 이벤트가 발생하도록 해야 할 때가 있다. 이러려면 난수를 사용해야 하는데, 난수 항목을 보면 알겠지만 난수란 랜덤하게 생성되는 이다.

허나 프로그램은 항상 정해진 대로만 움직이기 때문에 '진정한' 난수를 생성하는 것은 프로그램 만으로는 불가능하다.[1] 그래서 연산 장치는 어떤 수[2]가 입력되면 특정한 수식을 대입하여 결과를 산출하고, 이 입력되는 '어떤 수'는 연산 장치 내의 알고리즘에 의해서 생성한다. 그리고, 커맨드가 언제 입력하는가, 어떤 순서로 입력하는가 등등에 따라 다른 수가 입력되도록 하기도 한다.

겉보기엔 난수 같지만 사실은 법칙이 정해져 있는 이러한 것을 유사난수, 혹은 의사난수(pseudorandom number)라고 하며, 유사라는 이름을 보면 알겠지만 완벽한 무작위가 아니기 때문에 결국은 어떠한 패턴을 발견할 수 있다. 다만, 일반적인 플레이에서는 이를 일일이 생각하면서 조작하는 사람이 없기 때문에 실질적으로 난수가 될 수 있는 것이다. 그런데······.

이 패턴을 알아낼 수만 있다면 특정한 결과를 도출해 낼 수 있다는 결론에 도달한 폐인플레이어들은 갖가지 방법을 사용하여 자신이 원하는 결과를 얻으려고 하는 것을 통틀어 난수 조절, 혹은 난수 조정이라고 하는 것이다.

육성 시뮬레이션 게임, SRPG, RPG 등 일반적으로 입력값에 따라 결과가 달라지거나 사행성, 흔히 말하는 뽑기 시스템이 있는 게임에서 주로 행해지는 방법이나, 입력값에 영향을 끼칠 수 있고 그에 따라 특정한 결과가 나올 수만 있다면 장르 불문하고 행한다.

의사난수가 큰 반복쌍을 거쳐서 동일한 숫자들이 무한 반복되는 것은 맞다. 그렇지만 소프트웨어적 측면에서 아무리 저수준의 의사난수라고 해도 사람이 반복되는 주기를 알 수 있기에는 지나치게 크다. 결국, 소프트웨어 이용자가 난수를 예측하려는 행위는 의사난수의 초기 시드를 동일하게 맞추거나 동일한 시드에서 같은 횟수만큼 뽑아쓰도록 통제하는 것.

2 유형

유형이라고 하지만 이것들이 명확하게 나뉘어 있는 것은 아니며, 대부분 비슷비슷한 의미를 공유하고 있는 경우가 많다.

2.1 리셋노가다

말 그대로 원하는 조건이 나올 때까지 다시 하는 것을 반복하는 것.

두 가지 경우가 있는데, 첫 번째는 뭔가를 해서 실패하면 그냥 다시 시작해서 똑같은 행동을 반복하는 것, 두 번째는 다시 시작해서 다른 방법을 시도하는 것이다. 이는 위에 언급한 유사난수가 어떤 알고리즘을 사용하느냐에 따라 같은 행동을 했을 때 결과가 다를 수도, 같을 수도 있다. 가장 유명한 리셋노가다의 대표 게임은 슈퍼로봇대전 시리즈. 자세한 것은 항목을 참조.

2.1.1 난수고정

일부 게임은 턴이 시작될 때나 스테이지가 시작될 때 이미 난수 시드가 고정되어 아무리 반복해도 같은 결과가 나오는 경우가 있다. 이렇게 되면 '몇 번째에 나오는 값이 무엇이다' 라는 것이 무조건 정해져 있는 셈이다. 더구나 확률이 떡 하니 퍼센트로 떠 있고 그 확률이 매우 높은데도 불구하고 실패가 반복되는 것에서 경우도 있다. 써 있기는 80%니 95%니 써 있지만 여러분 이거 다 거짓말인 거 아시죠? 순진한 플레이어들은 저 숫자를 믿고 오늘도 하염없이 리셋 버튼을 누르고 있는 것이다. 이를 흔히 난수 고정이라고 부른다. [3]

보통 세이브시에 난수값이 고정되거나 턴이 시작할 때, 혹은 특정 행동을 시작할 때 난수 시작값이 입력되어서 난수가 항상 같게 나오는데, 특히 고전 게임으로 갈수록 이런 현상이 심하다. 같은 행동을 해도 결과가 달라질 정도로 그럴 듯한 난수를 발생시키려면 계속 난수 시작값을 달리해야하는데, 고전 게임들을 돌리는 머신들은 이러한 랜덤 노이즈 소스가 빈약하다. PC만 되어도 보통 현재 클럭 타이머(시스템 시간)을 가져다 쓰지만 귀찮은 개발사들, 혹은 디버깅을 용이하게 하고 싶은 개발사들은 적당한 선에서 난수처럼 보이도록 만드는 것인데, 난수 시작값을 자주 입력하지 않아 난수 '고정'이라고 불릴 정도의 고정된 결과값이 나오는 것이다. 혹은 난수인척 하고 그냥 정해진 경우가 있다. 그거 사기잖아

이럴 경우에는 위에서 언급한 것과 같이 '입력값'을 다르게 해 봐야 한다. 예를 들자면,

  • 다른 행동을 하거나 행동을 더 하거나 덜 한다. 예를 들어 무기를 바꿔서 공격하거나, 이동을 한 번 하고 공격하거나 하는 식으로. 경우에 따라 아무 의미 없는 뻘짓이 입력값을 다르게 하여 좋은 결과가 나오게 하기도 한다. 아니면 뜨는 확률을 믿지 말고 다른 놈을 쳐 보는 것도 방법.
  • 순서를 바꿔서 해 본다. 삼국지 시리즈를 예로 들자면 관우장비가 여포를 공격할 때 관우가 먼저 치고 장비가 나중에 치면 삑사리가 나는데 장비가 먼저 치면 크리티컬이 들어가거나 하는 식이다.

파이어 엠블렘 시리즈가 악명이 높다. 난수도 생성 안하는 우연을 가장한 필연이기 때문에 맵에서는 세이브, 로드고 뭐고 없으며, A라는 행동의 결과는 늘 B이다. 즉 적 턴에 잘 버티다가 마지막에 크리티컬 맞고 아군이 죽을 경우, 그 결과는 리셋이나 로드를 동원한다고 해도 같다. 물론 스테이지 진행중에 중간 세이브도 없고, 매 행동마다 자동적으로 세이브가 된다. 때문에 자기가 원하는 턴에서 리셋이 안되고, 리셋을 하려면 그 스테이지 자체를 처음부터 시작을 통해서 리셋노가다를 해야된다. 더군더나 캐릭터 레벨업 랜덤 스텟까지 고려하면……. 그래서 일본에서는 이 특정한 패턴을 알아내기 위한 처절한 몸부림이 발매 당시부터 계속되어 왔다.

시리즈에 따라서 난수고정인 작품이 있고 아닌 것이 있다. 슈퍼로봇대전 A 포터블에서 중단 세이브를 하는 순간 파이어 엠블렘처럼 게임 내부 난수가 고정돼서 무조건 행동의 결과가 고정된다. 아군 턴은 몰라도 적 턴일 때는 확실히 치명적인 요소. 사실상 리셋노가다에 제한을 걸어 버려 파장을 일으킨 적이 있었는데, 반응이 별로 안 좋아서 이후 작품에선 다시 랜덤하게 되도록 변경되었다. 슈퍼로봇대전 R부터는 적 턴에도 세이브가 가능하게 변경. 마음만 먹으면 90%대의 공격을 연속으로 회피하는 기행을 보여줄 수도 있었다.

문명 시리즈에서도 똑같은 행동을 한다면 세이브 로드를 해도 결과는 똑같지만[4] 게임 셋업 때 랜덤시드 항목에서 따로 설정을 할 수가 있다.

그 외에 삼국지 시리즈SD건담 G제네레이션 시리즈도 대표적인 난수고정 게임이다. 단, 전 시리즈가 다 그런지는 추가바람.

엑스컴: 에너미 언노운 역시 난수고정 게임이다. 아마 서양 게임을 주로 플레이하는 유저들 중에서는 난수고정 게임 하면 이게 가장 유명할 듯싶다. 이 게임은 특히 모든 결정 단계에서 공격, 스킬 등의 성공률을 하단에 띄워주기 때문에, 높은 확률을 믿고 공격 결정을 했는데 빗나가서 고통받는 경험을 다들 해본다. 이 때문에 세이브로드 신공으로 사격위치, 이동 순서 등을 변경해 맞을때까지 사격을 재시도하는 일이 잦았으며, 확장팩 엑스컴: 에너미 위드인에서는 아예 로드할 때마다 난수가 바뀌도록 하는 "저장질"이라는 세컨드 웨이브 옵션이 생겼다. 고난이도 MOD엑스컴 롱 워는 기본 골자는 본편을 따라가 저장질 세컨드 웨이브가 남아있다. 이 게임은 특히 아마추어 MOD인데다 변동/추가 사항이 아주 많아 게임 자체가 불안정해졌기 때문에 본편할 때처럼 세이브/로드 신공을 남발할 수가 없다. 게다가 복잡하고 대규모로 변한 전장 상황 때문에 한 번의 선택이 크게 전황을 좌우하기에 다이스 갓을 믿고 도박을 할지, 뒤로 물러나 다음을 대비할지 결정해야 한다.

포켓몬스터에서는 에메랄드 루프라고 불리는 난수조절 행위가 존재한다. 그 외에도 에뮬레이터로 포켓몬 배틀시 세이브를 해놓을 경우 맞거나 회피할 공격, 크리티컬 여부, 몬스터가 볼에 잡힐 경우는 모두 그 시점에서 미리 정해지기 때문에 세이브/로드 노가다하려면 아예 포켓몬 조우전에 세이브를 해두어야 한다.

2.2 입력값 조절

2.2.1 조작에 의한 입력

위에 말한 것처럼 특정한 입력값을 넣는다면 입력값이 같으므로 똑같은 조작을 반복하여 똑같은 결과를 낼 수 있다.

갑자기 아무 의미 없는 커맨드를 넣거나 갑자기 아무것도 입력하지 않는다던가 하는 그냥 봐선 쓸데없어 보이는 이해불능의 행동을 하는 때가 있는데, 주로 적의 출현/행동패턴을 결정하거나 아이템의 낙템률을 늘린다거나, 즉사기/회피를 성공하려고 쓴다. 예를 들자면 턴제 RPG의 전투시 커맨드 입력에 텀을 두거나 커맨드를 입력하다 말았다 하거나 액션게임의 갑자기 멈춤을 누르거나 잠깐 멈추거나 하는 등의 행위.

대부분 경험에 의해 나오는데, 흔히 말하는 '숨겨진 비기'라는 것이 이런 것으로 '그냥 때리면 일반 칼 주는데 캐릭터를 좌삼삼 우삼삼(···)한 후에 때리면 엑스칼리버를 주더라'류의 이야기다. 버그 플레이인 경우가 많다. 특히 난수가 간단하고 시간의 영향을 받지 않는다면 순서를 정확히 밟아 똑같은 난수를 내기 위해 굉장히 간단히 낼 수 있는 경우도 꽤 있어서, 난수 분석 등의 게임데이터 해석을 하지 않고도 사용할 수도 있다.

예를 들어, DS판 파이널 판타지 3의 오딘은 초저확률로 궁그닐을 드롭하는데(본래는 훔치기로 입수) 가까운 특정의 장소에서 세이브해 리셋하고 윈도우를 일정횟수 열었다 닫는걸로 난수를 조작해 확실히 궁그닐을 드롭시키고 훔치기와 합쳐 2개를 입수할 수 있다. 혹은 파이어 엠블렘 시리즈에서 유닛 선택후 커서 이동을 이리저리 삐뚤빼뚤하게 한다거나, 포켓몬스터 블랙/화이트에서 페라페의 수다를 사용하는것 등을 들 수 있다.

2.2.2 시간차에 따른 입력

시간경과에 의해 변동하는 내부수치가 존재할 경우 대부분은 1프레임 단위로 흘러가는 스피드라서 인간의 손과 눈으로 조절하는 게 불가능에 가깝다. 허나 이걸 툴 등의 도움을 얻어 실현시키는 건 가능하다. 예를 들면 1프레임마다 버튼을 조작하지 않으면 안되는 조작도 스크립트를 짜서(내부난수가 보이도록 한다) 프레임 단위로 입력한다든가 하면 가능해진다. 대표적인 예로 TAS가 있다.

굳이 TAS가 아니더라도 이 짓을 인간의 힘만으로 해내는 굇수들도 있으며, 난이도는 높지만 본래의 확률보다 좋은 결과를 낼 수 있는 가능성이 높아지기에 이걸 행하는 사람도 있다. 허나, 사람과 대전한다던가 하는 경우 유사난수를 난수로서 기능하지 못하는 측면이 있어 사용여부엔 찬반이 갈린다.

전원 패턴이라는 패턴 플레이의 일종도 있으며, 전원을 켠 후부터 특정한 시간에 정확한 커맨드를 입력하여 원하는 결과를 도출하는 방법이다. 자세한 것은 항목 참조. 대표적으로 세가 테트리스와 클레오파트라 포츈의 카운트스톱까지의 전원패턴, 배틀 가레가의 아이템 출현 순서 조절, 포켓몬스터에메랄드 루프, 몬스터 헌터 시리즈호석 호나이핑 등이 여기에 해당한다.

드래곤 퀘스트 9가와사키 로커 지도는 둘다 해당된다. 이쪽은 유저들이 난수를 완전히 해독해서 정해진 대로만 하면 고급 아이템을 찍어낼 수 있다.

2.2.3 기타

아예 난수해석(乱数解析)이라고 하여 알고리즘을 해석하여 게임 자체를 바꿔버리는 방법도 있다. 대표적인 것이 액플.

그 외에도 게임을 더 잘 하고 싶은 욕망, 재미있게 하고 싶은 마음이 거의 미신에 가까운 속설을 믿는 경우도 많이 있다. 대표적인 것이 바로 시드. 검증되진 않았으나 많은 사람들이 믿고 있다. 그리고 전설의 허경영 효과(···) 내 이름을 불러봐 넌 득템할 수 있고
  1. 하드웨어의 도움을 받으면 진짜 난수를 발생할 수 있다. 안테나 등을 통해 주변 노이즈를 입력받아 난수로 출력하는 칩 등
  2. 이 숫자를 '씨앗Seed'라고 하는데, 이 숫자가 동일하면 이후 난수의 순서가 동일하게 진행되게 된다.
  3. 컴퓨터로 '확률'을 판정하는 방법은 간단하다. 예를 들어 성공확률이 80%라고 하면 난수를 하나 뽑은 다음(모든 난수는 원래 0~1 사이의 소수점 값으로 나온다) 0~0.2면 실패, 0.2~1.0이면 성공으로 간주하는 식. 이러한 방식이니 어떤 중간과정을 거치더라도 같은 난수사용 횟수에서는 같은 수치를 얻게 된다.
  4. 예를 들자면 정찰병이 유적을 밟아서 지도가 나왔다면 로드를 하더라도 같은 경로로 움직였을 경우 똑같이 지도가 나온다