아래 레이드 시드에 관한 글이 재밌어 보이길래 써봤습니다




레이드에서 각 네임드마다 아이템테이블이 있고 

아이템 마다 각각의 드랍 확률이 있습니다

10%의 드랍률을 가진 아이템이 있다고 가정을 해보죠

그럼 컴퓨터에게 10%의 확률로 아이템을 드랍하라고 명령을 내려야 합니다

명령을 내리기 위해서 함수를 만들어 쓸겁니다

함수는 프로그램안에서의 규칙이라고 이해하시면 됩니다

랜덤한 수를 구하는 함수를 만들고 

랜덤함수를 통해 1부터 100까지의 수를 무작위로 생성하게 합니다

함수를 통해 생성된 랜덤한 수가 1~10 사이라면 해당 아이템을 드랍하게 만들면 되겠죠

근데 이건 틀렸습니다 

이건 전혀 랜덤한 숫자가 아닙니다

왜냐면 컴퓨터는 랜덤을 모르기 때문입니다

아까 함수얘기를 했는데 

함수없이는 무작위로 새로운 숫자 하나만 창조하라는 명령은 할 수 없습니다

보통의 경우 

랜덤숫자 = (시작숫자 x a + b) / c

와 같은 식으로 랜덤에 가까워 보이는 숫자를 생성합니다

여기서 시작숫자는 보통 현재시간을 n진수로 바꾸어 씁니다 

이러한 랜덤 숫자를 생성하는 함수들을 PRNG(pseudo-random number generator)라고 합니다

보통 사람들이 생각하는 것은

랜덤함수의 시드(시작숫자)를 생성하는 것이 입던시간 혹은 입던 플레이어에 의해 바뀐다고 믿고 있는 것이구요

하지만 블리자드는 일부 플레이어에 의해서 시드에 영향을 미칠 수 있다고 주장하는 것을

부정한 바 있습니다

블리자드가 사용하는 PRNG는 "IBAA" 라고 하고요

구글에서 "springer ISAAC IBAA" 를 검색하시면 관련 논문을 찾으실 수 있습니다


이러한 시드의 존재때문에 완전한 랜덤의 숫자는 있을 수 없구요

랜덤에 가까워 보이는 수를 만들 수 있습니다

어떠한 게임에서 강화 주문서를 사용할 때 

나만의 장소 여기서 강화가 잘 되더라 하는건 미신이 아닐 수 있습니다 :)

제가 지금까지 말한건 아래 유튜브의 스크립트를 복붙한거나 다름없구요 

https://www.youtube.com/watch?v=DSBDQhsOmhs

유튜브에서 매우 재밌게 설명해주니 재미삼아 한 번 보시길 추천하구요 

와우의 PRNG에 대해 더 궁금하시다면 검색을 해보시거나 아래 링크를 참고해주세요

https://wowwiki-archive.fandom.com/wiki/Random_loot

https://us.forums.blizzard.com/en/wow/t/rng-how-random-is-it/522751/150


아래는 chat gpt에게 IBAA 설명을 부탁했습니다

**IBAA (Instantaneous Base-Adjusted Algorithm)**는 월드 오브 워크래프트와 같은 블리자드 게임에서 사용되는 **의사 난수 생성기(PRNG)**입니다. 블리자드는 이 알고리즘을 통해 게임 내에서의 다양한 랜덤 요소, 특히 전리품 드랍과 같은 중요한 게임 메커니즘을 처리합니다. IBAA의 구체적인 구현에 대한 기술적인 세부사항은 공개되지 않았지만, 블리자드는 해당 PRNG 알고리즘에 대해 일부 정보를 공개했습니다.


IBAA의 기본 개념

IBAA는 기본적으로 **의사 난수 생성기(Pseudo-Random Number Generator)**로, 무작위처럼 보이는 숫자를 생성하지만 실제로는 예측 가능한 시드를 기반으로 숫자를 만들어내는 방식입니다. PRNG는 완전한 무작위성을 제공하지 않지만, 사람들은 이를 랜덤처럼 인식하게 되므로 실용적인 목적에 적합한 방식입니다.

IBAA는 난수 생성기로서 특정 시드 값을 기반으로 숫자를 생성하며, 이 시드 값은 여러 가지 방법으로 결정될 수 있습니다. 예를 들어, 게임 내의 시간, 이벤트, 서버 상태 등의 요소들이 시드로 활용될 수 있으며, 그 결과 생성되는 난수 값은 각종 게임 메커니즘에 영향을 미칩니다.


IBAA와 전리품 시스템

게임 내에서의 전리품 드랍은 IBAA가 생성하는 난수를 기반으로 결정됩니다. 예를 들어, 보스 전투 후 어떤 전리품이 드랍될지, 혹은 플레이어가 "롤"을 할 때의 결과는 IBAA를 통해 계산됩니다. 이 시스템은 그 자체로 확률을 기반으로 하여, 동일한 시드와 조건 하에서는 동일한 결과를 도출할 수 있지만, 시드가 달라지면 결과가 달라집니다.

IBAA게임 내의 다른 확률적 요소들과 동일한 난수 스트림을 공유할 수 있습니다. 예를 들어, 플레이어의 공격이 빗나가는지, 치명타가 발생하는지, 방어가 통과하는지와 같은 것들도 IBAA로 생성된 난수에 의해 결정됩니다. 전리품 드랍만 영향을 받는 것이 아니라, 게임 내의 다양한 확률적 요소들이 모두 동일한 PRNG 알고리즘을 통해 관리된다고 볼 수 있습니다.


IBAA의 특징

  1. 시드 기반: IBAA는 특정 시드 값을 기반으로 난수를 생성합니다. 시드는 여러 가지 방법을 통해 얻을 수 있으며, 게임의 각 상황에 따라 달라질 수 있습니다.

  2. 무작위성: IBAA는 난수처럼 보이는 값을 생성하지만, 그 값은 시드와 알고리즘에 따라 예측 가능할 수 있습니다. 즉, 완전한 "무작위성"을 제공하지는 않지만, 인간이 예측할 수 없을 정도로 복잡한 방식으로 난수를 만듭니다.

  3. 게임 내 여러 요소에 사용: 전리품 드랍 외에도, 공격의 성공 여부, 치명타 확률 등 다양한 게임 메커니즘에서 IBAA의 난수 값이 사용됩니다.

  4. 다양한 변수: IBAA는 여러 종류의 "변수"를 시드로 사용할 수 있습니다. 예를 들어, 서버의 시간, 이벤트 발생 여부, 또는 특정 게임 세션에 맞춰 동적으로 변할 수 있습니다.

결론

IBAA는 월드 오브 워크래프트와 같은 블리자드의 게임에서 중요한 역할을 하는 의사 난수 생성기입니다. 이 알고리즘은 전리품 드랍, 전투에서의 확률적 요소 등 많은 게임 내 동작을 "랜덤하게" 처리하는데 사용됩니다. 블리자드는 IBAA의 알고리즘을 공개하였으며, 이를 통해 게임 내의 랜덤 요소들이 어떻게 관리되고 생성되는지를 알 수 있습니다. 다만, 이 알고리즘의 세부 구현은 공개되지 않았고, 그 과정에서 발생하는 **"랜덤성"**은 정확히 예측할 수 없지만 충분히 신뢰할 수 있는 수준으로 설계되어 있습니다.