이 글은 마법 부여의 원리에 대한 글이다.
기본 개념[]
아이템에 마법을 부여하기 위해서는 마법 부여대와 청금석이 필요하다. 마법 부여대를 설치한 뒤 마우스 우클릭하면 마법 부여 GUI가 나타난다. 마법 부여 GUI은 보관함의 상단 부분에 위치하는데, 왼쪽에는 책 모양의 그래픽과 그 아래 아이템을 넣을 수 있는 슬롯이 2개 있고 오른쪽은 비어 있다. 슬롯에 원하는 아이템과 청금석을 넣으면 오른쪽에 있는 슬롯 3개에 이상한 문자가 나타난다. 이것은 표준 은하계 알파벳이라는 가공의 문자로 된 짧은 문구들로, 문구 오른쪽에 마법에 소비되는 레벨 숫자가 나타난다. 원하는 레벨의 슬롯을 선택하면 아이템의 마법 부여가 완료되고 해당 레벨 만큼 플레이어의 레벨이 줄어든다.
플레이어가 원하는 아이템을 마법 부여대에 넣으면, 적용 가능한 마법 레벨이 아래의 공식에 따라 각각의 슬롯에 무작위로 생성된다. 마법 레벨은 인근에 있는 책장의 수(최대 15개) 및 어떤 슬롯에 들어간 마법인가에 따라 달라진다.
- 기본 마법 레벨 (base) = (1..8 + floor(b / 2) + 0..b),
여기에서 floor(x)는 소숫점 이하를 버리는 함수이다. 또 b는 인근의 책장의 갯수(최대 15)이며, x..y 는 x 부터 y 사이에 고르게 분포하는 임의의 정수이다. (예를 들어 책장이 15개 있을 경우, 내림(b / 2)= 내림(15/2)= 7이므로, base= 1~8 + 7 + 0~7 이 된다. 따라서 최소 base = 1+7+0=8, 최대 base = 8+7+15=30이다.) 이 값은 슬롯 위치에 따라 변경된다.
- 위쪽 슬롯 마법 레벨 = max (base / 3, 1)
- 중간 슬롯 마법 레벨 = (base × 2) / 3 + 1
- 아래쪽 슬롯 마법 레벨 = max(base, b × 2)
max(x, y) 는 두 수 중 최대값을 반환한다. 예를 들어 base가 15로 선택되었을 경우, 윗쪽 슬롯은 max(15/3, 1) = 5, 중간 스롯은 (15x2)/3 +1 = 11, 아래쪽 슬롯은 max(25, 15x2)= 30 이 된다.
아래 표는 책장의 수에 따라 세개의 슬롯에 각각 나올 수 있는 최대/최소 레벨 마법과, 마법의 범위를 나타낸 것이다. 예를 들어 책장을 10개 설치했을 때 마법 부여대에서 나오는 마법 레벨은 2~23이며, 윗쪽 슬롯에서는 2~7 레벨의 마법이 나온다.
책장의 수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
최소 레벨 (윗쪽 슬롯) | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 2 | 2 | 2 | 2 |
최대 레벨 (아래쪽 슬롯) | 8 | 9 | 11 | 12 | 14 | 15 | 17 | 18 | 20 | 21 | 23 | 24 | 26 | 27 | 29 | 30 |
책장의 수 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
윗쪽 슬롯의 마법 레벨 범위 | 1 - 2 | 1 - 3 | 1 - 3 | 1 - 4 | 1 - 4 | 1 - 5 | 1 - 5 | 1 - 6 | 1 - 6 | 1 - 7 | 2 - 7 | 2 - 8 | 2 - 8 | 2 - 9 | 2 - 9 | 2 - 10 |
중간 슬롯의 마법 레벨 범위 | 1 - 6 | 1 - 7 | 2 - 8 | 2 - 9 | 3 - 10 | 3 - 11 | 3 - 12 | 3 - 13 | 4 - 14 | 4 - 15 | 5 - 16 | 5 - 17 | 5 - 18 | 5 - 19 | 6 - 20 | 6 - 21 |
아랫쪽 슬롯의 마법 레벨 범위 | 1 - 8 | 2 - 9 | 4 - 11 | 6 - 12 | 8 - 14 | 10 - 15 | 12 - 17 | 14 - 18 | 16 - 20 | 18 - 21 | 20 - 23 | 22 - 24 | 24 - 26 | 26 - 27 | 28 - 29 | 30 - 30 |
참고로 특정한 슬롯에 높은 경험치를 소요된다고 해서, 낮은 경험치를 요구하는 마법보다 반드시 좋다는 것은 아니다.
크리에이티브 모드는 경험치와 레벨이 존재하지 않으므로 마법 부여를 해도 레벨이 소모되지 않는다. 그러므로 레벨이 모자라 슬롯이 비활성화되지도 않는다.
책장의 배치[]
인근의 책장은 마법 부여대의 최대 가능 마법 레벨을 올린다. 책장이 하나도 없을 경우, 8 레벨 이상의 마법은 나오지 않는다.
책장이 효과가 있으려면, 반드시 마법 부여대로 부터 수평으로 2블록 위치에 설치하여야 하며 높이는 마법 부여대의 높이와 같거나 하나 더 높아야 한다. 또한 마법 부여대와 책장 사이에 있는 아래 위 2개의 블록은 반드시 공기 블록이어야 한다. (횃불, 양탄자, 눈 등도 효과를 방해한다.) 아래의 그림에서 하얀 공간은 반드시 공기 블록이어야 하며, 은 어떤 블록이 있어도 관계가 없다.
위에서 보았을 때 | 또는 | ||
---|---|---|---|
옆에서 보았을 때 | 또는 |
참고로, 책장으로부터 날라오는 글자 모양의 입자는 다른 법칙을 따라서, 책장이 마법 부여대 레벨을 높이는데 기여하지 않아도 입자가 날라온다.
마법 한계에 도달하기 위한 책장 배치는 여러가지 방법이 있다. 가장 쉬운 방법은 아래 그림과 같이 마법부여대에서 1 블록 떨어진 위치에 1층으로 책장을 배치하고, 그 중 한 변에서만 책장을 빼는 것이다.
또 다른 방법으로, "도서관 구석" 배치 방법으로서, 두 변에만 2 블록 높이로 쌓는 것이다. 이렇게 배치하면 총 16개의 책장이 소요되는데, 1개가 여유가 있으므로, 보이지 않는 구석에서 1개를 빼도 무방하다.
마법 레벨 선택하기[]
마법은 마법 레벨에 따라 제공되며, 마법 레벨은 활성화된 책장의 수에 의존하므로, 제공되는 마법을 변경시키는 가장 쉬운 방법은 책장을 비활성화시키는 것이다. 책장을 비활성화시키려면, 책장과 마법 부여대의 사이에 무언가(예를 들면 횃불)을 설치하면 된다. 이러한 방법을 사용하면 마법 부여대와 책장은 그대로 두면서도 저 레벨의 마법을 얻을 수 있다. 횃불을 깨뜨리면 책장의 효과를 복구시킬 수 있다.
오른쪽 그림에는 바닥에 검정색, 하얀색, 파란색, 빨간색의 양탄자가 깔려 있다. 아래 표는 횃불 배치에 따라, 활성화된 책장의 수를 0-15개로 제어하는 방법이다. 예를 들어 아래 표에서 활성화된 책장 수를 6개로 만들고 싶다면, 까만 양탄자 자리와 하얀색 양탄자 자리에 횃불을 설치하고, 파란색/빨간색 양탄자를 치우면 된다.
Active bookshelves | ||||
---|---|---|---|---|
0 | ||||
1 | ||||
2 | ||||
3 | ||||
4 | ||||
5 | ||||
6 | ||||
7 | ||||
8 | ||||
9 | ||||
10 | ||||
11 | ||||
12 | ||||
13 | ||||
14 | ||||
15 |
마법이 선택되는 방법[]
"마법 부여 레벨"(Enchantment level)은 필요한 경험치 레벨(HUD 오른쪽 아래에 표시되는 초록색 숫자)이다. "마법 파워 레벨"(Enchantment power)는 특정 마법의 힘이다. 예를 들어 "날카로움 IV"는 파워가 4이다.
마법 부여 알고리즘은 3 단계로 이루어져 있다.
1단계 - 마법 부여 레벨 보정[]
마인크래프트에서 첫번째로 하는 것은 기본 마법 부여 레벨에 두 가지 보정을 하는 것이다. 각각의 보정은 특정한 범위로 제한되는데, 해당 범위의 가운데 쪽이 더 자주 나오는 방식으로 선택된다.
첫번째 보정은 아이템의 "마법가능성"에 따라 결정된다. 마법가능성은 아이템의 재료 및 유형에 따라 달라진다.(아래표 참조.) 마인크래프트에서는 우선 0 부터 마법가능성의 절반 사이에서 임의의 한 숫자를 선택하고, 이 숫자에 1을 더하여 기본 마법 부여 레벨에 더한다. 단, 활, 책, 낚싯대는 마법가능성이 1이다. 이 임의의 수는 삼각형 모양의 분포를 따르므로, 마법가능성의 1/4 지점이 가장 많이 선택된다. (예를 들어 다이아몬드 검의 마법 가능성 10이므로, 0~5 사이에서 3을 선택했다고 가정하면 1을 더하여 4가 마법 부여레벨이 된다.)
보정 마법 부여 레벨을 계산하는 공식은 다음과 같다.
- L = B + R1 + R2 + 1
여기에서 각 항목의 의미는 다음과 같다.
- B : 기본 마법 부여 레벨
- R1 과 R2 : 임의로 생성된 정수 (나누기는 소숫점 이하를 버린다)
- R1 = randomInteger(0, E / 4)
- R2 = randomInteger(0, E / 4)
- L : 마법가능성
재질 | 갑옷 마법가능성 | 검/도구 마법가능성 |
---|---|---|
나무 | 없음 | 15 |
가죽 | 15 | 없음 |
돌 | 없음 | 5 |
철 | 9 | 14 |
사슬 | 12 | 없음 |
다이아몬드 | 10 | 10 |
금 | 25 | 22 |
책 | 1 | 1 |
다음으로 마인크래프트는 0.85에서 1.15 사이의 임의의 수를 선택한다. (이때도 삼각형 분포를 따른다.) 보정된 마법 부여 레벨에 이 값을 곱한 뒤 반올림한다. (따라서 15% 범위내에서 증가 또는 감소할 수 있다.)
1단계의 가상 코드(pseudocode)[]
아래는 위에서 설명한 1단계 - 마법 부여 레벨 보정 절차를 가상 코드로 나타낸 것이다.
// Returns a uniformly distributed random integer between 0 and n - 1, inclusive function randomInt(n); // Returns a uniformly distributed random real (fractional) number between 0 (inclusive) and 1 (exclusive) function randomFloat(); // Returns the real number n rounded to the nearest integer. function round(n); // Generate a random number between 1 and 1+(enchantability/2), with a triangular distribution enchantability_2 = enchantability / 2; int rand_enchantability = 1 + randomInt(enchantability_2 / 2 + 1) + randomInt(enchantability_2 / 2 + 1); // Choose the enchantment level int k = chosen_enchantment_level + rand_enchantability; // A random bonus, between .85 and 1.15 float rand_bonus_percent = 1 + (randomFloat() + randomFloat() - 1) * 0.15; // Finally, we calculate the level int final_level = round(k * rand_bonus_percent); if ( final_level < 1 ) final_level = 1
Source:[1]
2단계 - 가능한 마법 검색[]
이제 보정된 레벨을 기준으로, 마인크래프트는 대상 아이템에 적동될 수 있는 모든 마법 유형 목록과, 해당 마법의 마법 파워 레벨을 작성한다.
각 마법 유형의 파워 레벨은 마법 레벨 표에 있는 레벨과 값으로 결정된다. 어떤 마법 유형의 각 파워 레벨에 대하여, 해당 파워 레벨의 마법을 제공할 수 있는 최소 및 최대 보정 레벨이 있다. 보정 마법 레벨이 해당 범위내에 있을 경우, 마법에 해당 파워가 지정된다. 보정 마법 레벨이 파워 레벨 구간이 중복되는 구간에 있을 경우에는 높은 파워 레벨이 사용된다.
보물[]
일부 마법은 "보물" 마법으로 취급된다. 보물 마법이란, 마법 부여대에서 생성될 수 없고, 특정 조건하에서만 발견될 수 있는 마법이다. 여기에서 조건이란, 상자 전리품이 생성될 때, 낚시, 혹은 마법이 부여된 책을 거래할 때 등을 말한다.
3단계 - 마법 선택[]
마법 목록이 만들어지면 그 속에서 아이템에 부여할 바법이가 선택된다. 이때 항상 최소한 하나의 인챈트는 선택되며, 이 선택은 통계적인 ‘가중치’에 따라 결정된다. 마법에 가중치가 크게 있을수록 선택될 확률이 높다. 선택 공식 및 가중치는 다음과 같다. (E는 마법, N은 가능한 마법 수, W는 가중치)
방어구 마법 | 가중치 |
---|---|
보호 | 10 |
화염으로부터 보호 | 5 |
가벼운 착지 | 5 |
폭발로부터 보호 | 2 |
발사체로부터 보호 | 5 |
호흡 | 2 |
친수성 | 2 |
검 마법 | 가중치 |
날카로움 | 10 |
강타 | 5 |
살충 | 5 |
밀치기 | 5 |
화염 | 2 |
약탈 | 2 |
도구 마법 | 가중치 |
효율 | 10 |
섬세한 손길 | 1 |
내구성 | 5 |
행운 | 2 |
활 마법 | 가중치 |
힘 | 10 |
밀어내기 | 2 |
화염 | 2 |
무한 | 1 |
첫 번째 마법이 선택되고 나면 추가로 마법이 부여될 수 있는데, 최대 3개까지 허용되며 다음과 같은 순서에 따른다.
- 보정 마법 부여 레벨을 반으로 나눈 값에 1을 더하고 50으로 나눈 확률로 마법이 추가될 여부 결정. (((보정 마법 부여 레벨 ÷ 2) + 1) ÷ 50)
- 가능한 마법 목록에서 먼저 붙은 마법과 동시에 붙을 수 없는 마법을 제외 (이를테면 강타가 붙은 검에 뾰족함과 살충을 부여할 수 없으므로 제외)
- 남은 목록에서 가중치에 따라 마법이 선택되어 아이템에 두 번째로 부여됨
- 다시 1로 돌아가 반복 (세 번째는 두 번째의 보정 마법 부여 레벨을 다시 반으로 나누므로 확률이 더 크게 감소함)
동시에 부여될 수 없는 마법은 다음과 같다.
- 이미 첫 번째에서 선택된 마법
- 검의 날카로움과 강타, 살충 (데미지가 중첩되어 밸런스가 파괴되기 때문)
- 방어구의 모든 보호 마법 (보호가 아닌 마법은 예외)
- 섬세한 손길과 행운 (각 마법의 특성상 서로 상충됨)
마법 부여 시뮬레이터[]
이 사이트 에서 마법 부여를 시뮬레이션해 볼 수 있다.
- ↑ Minecraft 1.8 source code