공돌이 나부랭이여서 정확하지 않을수 있음 크롤위키로 링크타고 좀 찾아봄
선3줄요약
1. spell_type은 학파가 아니라 스펠이름이여서 학파단위로 찾는게 아님 (각 스펠마다 가중치를 가지는듯)
2. 원소마법(화염, 대지, 대기, 얼음, 알쳄은 포함x)은 100+학파레벨*10만큼의 가중치를 가짐 -> 파괴마법은 기본가중치 100만 가짐
+이중학파의 경우 가지는 모든 원소마법을 고려해서 학파레벨*10만큼 가중치를 추가함
3. 순수파괴마법은 그냥 파괴마법 종류가 많기 때문에 가중치가 생각만큼 큰 역할을 안하는 것으로 생각됨
---
여기부터는 코드 찾아볼 사람들만
0. spell_type형은 학파가 아니라 스펠이름 그자체임 (enum.h 3855번째줄부터 정의되어있음)
1. religion.cc의 1944번째줄부터 시작하는 코드를 보면 offers의 구성요소는 _vehumet_get_spell_gifts()로 결정됨.
(바로밑코드에 offers으로 프롬프트를 구성함. Vehumet offers you ~~하는거 있음)
2. _vehumet_get_spell_gifts()은 num_offers만큼 _vehumet_find_spell_gift()로 spell_type을 찾아옴
3. _vehumet_find_spell_gift()은 다 가져와봄
근데 저렇게 하면 for문이 돌면서 total_weight가 계속 갱신되는거 같은데 의도된건지는 모르겠음
아무튼 스펠(elig)에 대해서 this_weight/total_weight확률로 가져오는게 맞음 그럼 weight를 어떻게 산정하는지를 찾아보면..
vehumet_weighting을 이용해서 하는데, spell의 elemental_preference만큼을 추가하는듯
elemental_preference는 skills.cc에 정의됨
spell_skills를 실행한 집합의 원소들에 대해 _skill_is_elemental이면 skill*scale(=10)만큼 더한다는 소리임
일단 _skill_is_elemental을 보면 알쳄은 포함이 안되는 걸 알 수 있음 (화염, 대지, 대기, 얼음만 원소마법)
이중학파는 어떻게 계산되는지 궁금해서 spell_skills를 찾아봄
(이때 skill_type은 enum.h에 정의됨(enum이라서 상수덩어리임 : 위에 보이는 SK_FIRE_MAGIC이런거))
spell_skills는 spl-cast.cc에 정의됨
(skill_set은 여기서 볼수 있듯이 skill_type의 set을 불러오는 다른 이름인듯, 포인터로 계산해서 void형인가봄)
get_spell_disciplines는 spl-util.cc에 정의되고, spell_desc에서 소속 학파가 disciplines로 정의됨.
spell의 정보는 spl-data.h에 저장되어있고, 2개 이상 가질 수 있는 값임
여기서 2개이상 가져올수 있으면 가져와서 skills(skill_list)에 넣는거임
그리고 거기서 elemental이 보이면 보일때마다 가중치를 추가함
예를 들어 냉기구름은 disciplines을 가져올 때 파괴, 대기, 냉기를 모두 가져오고, 그렇게 만들어진 skill_list에 대해 elemental이면 가중치에 학파*10만큼 추가함
결론 : 이중학파면 그만큼 가중치 추가되는게 맞는듯
---
순수 파괴 마법들은 책에서 자주 나와서 빈것들 중에서 찾느라고 자주나오는 것이거나 파괴주문들이 너무 많아서 가중치를 고려해도 확률상으로 잘 나오기 때문인듯
나도 정확하게 분석한 것이 아닐수도 있으니까 혹시 잘아는 사람있으면 한번만 확인해주세요 ㅠㅠ
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.