소스코드 출처 : https://github.com/chenmingbiao/stone-age
<펫의 성장을 결정하는 data file>
게임을 구성하는 많은 data 파일이 있는데 그 중 enermybase.txt라는 파일이 펫의 성장률 및 특성을 결정합니다.
이 파일은 다음과 같이 펫 이름과 숫자 data로 이루어져 있습니다. 그중 노란색으로 색칠한 부분은 예시로 설명하기 위한 반기노에 대한 data set입니다.
앞쪽부터 순서대로 각 변수의 의미는 다음과 같습니다.
94 : 펫번호
26 : 초기치 계수
4.5 : 성장 계수
24 : 체력 계수
38 : 공격 계수
16 : 방어 계수
20 : 순발력 계수
그 뒤의 숫자들은 포획률, 속성, 기술, 크리티컬 확률, 회피율 등을 나타내니 생략하도록 하겠습니다.
따라서 여기로부터 직관적으로 알 수 있는 사실은 24:38:16:20 정도의 비율로 체/공/방/순 성장률을 가진다는 것입니다.
여기서 한가지 이상한 점이 있습니다.
반기노는 위와 같이 방성이 순성보다 높은데 data file에서는 방:16, 순:20으로 순발력이 더 높습니다.
이를 이해하기 위해서는 캐릭터 스탯에서 공격력을 10 올리면 방어력도 1이 오르는 것과 같은 스탯 보너스가 페트에도 적용된다는 것을 알아야합니다. 관련 수식은 다음과 같습니다.
표기체력 = 체*4 + 공 + 방+ 순
표기공격력 = 체*0.1 + 공 + 방*0.1 + 순*0.05
표기방어력 = 체*0.1 + 공*0.1 + 방어력 + 순*0.05
표기순발력 = 순
뒤에서 자세히 계산하겠지만 방어력은 다른 3개의 스탯에서 보너스 스탯을 받고 순발력은 그렇지 못하기 때문에 data상 순발력이 높아도 최종적으로 표기되는 성장률은 방어력이 높습니다.
<1레벨 페트 초기치 생성법>
우선, 반기노의 data file에 있던 기본 성장 계수 24/38/16/20(체/공/방/순)에 랜덤으로 -2~2 사이의 값이 더해집니다.
만약 운이 좋아 모두 2가 더해진다면 (1/625의 확률) 26/40/18/22가 되며, 이 값은 생성된 펫의 base 성장률로 저장됩니다.
이부분은 초기치에 랜덤성을 부여하는 코드입니다. 앞에서 계산된 26/40/18/22에 무작위로 10포인트가 분배됩니다. +3/+3/+2/+2가 부여된다고 생각하면 29/43/20/24가 되며 이 값은 초기치를 결정합니다.
초기치를 계산하는 수식입니다. Level이 1이기 때문에 앞의 항은 소거되고 초기치 계산은 다음과 같이 됩니다.
체력 : 26(초기치 계수)*29/100 = 7.54
공격력 : 26(초기치 계수)*43/100 = 11.18
방어력 : 26(초기치 계수)*20/100 = 5.20
순발력 : 26(초기치 계수)*24/100 = 6.24
여기서 앞서 설명 드렸던 스탯 보너스를 고려하면 초기치는 다음과 같습니다.
표기체력 : 7.54*4 + 11.18 + 5.20 + 6.24 = 52.78
표기공격력 : 7.54*0.1 + 11.18 + 5.20*0.1 + 6.24*0.05 = 12.768
표기방어력 : 7.54*0.1 + 11.18*0.1 + 5.20 + 6.24*0.05 = 7.386
표기순발력 : 6.24 = 6.24
정수자리만 표기하면 초기치는 52/12/7/6이 되며 이는 아래 페트정보의 S급 초기치와 일치합니다. 이 경우 공/방 소수점이 높기 때문에 정석 능력치는 잡기 쉬우나 통수확률이 높다고 볼 수 있습니다. (공12를 잡았지만 실제로는 12.1 이런 소수점소 가질 확률이 높으므로..)
오버능이라는 것은 위에서 +3/+3/+2/+2로 랜덤하게 분배되었던 포인트가 한두개의 능력치에 편향되어 분배되면 발생하게 되며, 이 합은 항상 10이기 때문에 모든 능력치가 모두 오버능인 상황은 절대 발생할 수 없습니다. 또한 오버능이 존재하면 다른 능력치가 딸릴 확률이 상당히 높습니다.
또한 이 10개의 포인트는 초기치에만 영향을 줄 뿐, 성장률 base는 그 전단계에서 결정되므로 오버능이면 높은 초기값을 가진다는 이점만 있을 뿐 S급보다 더 높은 성장률을 가지는 것은 아닙니다.
이 분배를 +10/0/0/0, 0/+10/0/0, 0/0/+10/0, 0/0/0/+10으로 해보면 각 능력치별 존재 가능한 최대치도 계산 가능합니다.
+10/0/0/0 -> 58.24/12.09/6.942/5.72 (6오버능)
0/+10/0/0 -> 50.44/14.43/6.942/5.72 (2오버능)
0/0/+10/0 -> 50.44/12.09/9.282/5.72 (2오버능)
0/0/0/+10 -> 50.44/11.96/6.812/8.32 (2오버능)
<페트 성장률 결정법>
성장률을 결정하기에 앞서 페트의 rank라는 것을 결정합니다. 이 rank는 기본 계수가 너무 낮은 펫은 성장률을 좀 더 높게, 기본 계수가 너무 높은 펫은 성장률을 조금 낮게 보정해주는 등급입니다.
페트의 RANK와 보정계수 값은 다음과 같습니다.
RANK 1 : 성장계수의 합이 100 이상 (보정계수: 450~500)
RANK 2 : 성장계수의 합이 95~99 (보정계수: 470~520)
RANK 3 : 성장계수의 합이 90~94 (보정계수: 490~540)
RANK 4 : 성장계수의 합이 89~85 (보정계수: 510~560)
RANK 5 : 성장계수의 합이 80~84 (보정계수: 530~580)
RANK 6 : 성장계수의 합이 80 미만 (보정계수: 550~600)
성장계수의 합이란 페트 dataset에 있던 공방순체 계수의 합입니다.
94 : 펫번호
26 : 초기치 계수
4.5 : 성장 계수
24 : 체력 계수
38 : 공격 계수
16 : 방어 계수
20 : 순발력 계수
반기노의 경우 24+38+16+20 = 98 이므로 RANK 2에 해당합니다.
레벨업마다 성장률 공식은 다음과 같습니다.
능력치별 성장률 = (base성장률+A)*B/10000
base 성장률은 앞서 1레벨 페트가 생성될 때 결정된 값으로 26/40/18/22 (체공방순) 입니다.
여기서 A는 1레벨 페트를 생성할때와 마찬가지로 총 10포인트가 체공방순에 나뉘어 분배됩니다.
B는 보정계수로써 반기노는 RANK 2에 해당하므로 470~520 사이의 랜덤값을 가집니다.
A의 평균값 2.5, B의 평균값 495로 계산을 하면 능력치별 성장률은 다음과 같습니다.
체성: 1.4107
공성: 2.1037
방성: 1.0148
순성: 1.2128
보너스 포인트를 고려하면 표기되는 성장률은 다음과 같습니다.
표기체성: 9.9742
표기공성: 2.4069
표기방성: 1.4268
표기순성: 1.2128
성장률을 반올림해보면 페트정보의 S급 성장률과 정확히 일치합니다. S/S/S/S 베이스를 가지는 1레벨 페트를 얻을 확률은 1/625이며 평균대로만 큰다면 정석 S급이 된다는 것을 알 수 있습니다.
하지만 A와 B 값은 레벨업마다 랜덤하게 결정되므로 같은 base의 펫이라도 운적인 요소가 있습니다.
(ex1) B값이 평균적인 상황에서 A값이 한두개의 능력치에 치중되면 S+/A+/S+/A+ 이런 식으로 성장할 수도 있고,
(ex2) A값이 평균적인 상황에서 B값이 높거나/낮게 뜬다면 올S+ 또는 올A+과 같이 성장할 수도 있습니다.
앞의 수식들 기반의 시뮬레이션 결과를 보여드리며, 다음에는 페트 환생에 대한 코드에 대한 글을 올리도록 하겠습니다!
<시뮬레이션 1 – 반기노 포획 실험>
1만마리 포획
정석or변형정석: 181마리 -> 실제 base S는 8마리 -> 비율 4.42%
능플or피플: 68마리 -> 실제 base S는 10마리 -> 비율 14.7%
나머지 9751마리 -> 실제 base S는 1마리 -> 비율 0.012%
총 base S 19마리 -> 0.19%
결과: 1만마리 잡았더니 성장률 최대치는 19마리가 등장하였다. 위의 확률처럼 정석이나 그 이상 키워도 망하는게 훨씬 많다.
<시뮬레이션 2 – 페트 육성 실험>
Base 최대값인 페트 150렙까지 1000마리 키우기
(체/4+공+방+순) 기준으로
100%: 10.06 / 2.42 / 1.45 / 1.23 (총성:5.093)
90%: 10.02 / 2.41 / 1.44 / 1.22 (총성:5.073)
75%: 9.97 / 2.41 / 1.43 / 1.23 (총성:5.073)
50%: 9.95 / 2.41 / 1.43 / 1.22 (총성:5.067)
25%: 9.98 / 2.40 / 1.43 / 1.22 (총성:5.047)
10%: 9.96 / 2.39 / 1,43 / 1.22 (총성:5.040)
0%: 9.95 / 2.37 / 1.43 / 1.21 (총성:5.001)
최대체성: 10.08 최소체성: 9.91
최대공성: 2.43 최소공성: 2.37
최대방성: 1.45 최소방성: 1.41
최대순성: 1.23 최소순성: 1.19
'Game' 카테고리의 다른 글
스톤에이지 야생페트를 환생시켜서 S급 만드는 방법 (3) | 2023.05.21 |
---|---|
스톤에이지 페트 환생 및 진화 (29) | 2020.03.11 |
스톤에이지 데미지 / 회피율 / 크리티컬율 계산 (6) | 2020.03.10 |
스톤에이지 페트 소수점 계산기 (ver.1) (11) | 2020.02.14 |