mount & blade warband 모드 개발: 아이템 코드 따라가기
파일: 모듈 시스템에서 모드로
기본적으로 배포하는 모듈 시스템에서 module_items.py
으로 정의한 아이템은 process_items.py
를 거쳐 item_kinds1.txt
가 됩니다.

정보: 모드에서 모듈 시스템으로
제 취향의 방식으로 추적하는 순서를 그대로 따릅니다.
헤더
네이티브의 item_kinds1.txt
는 다음 내용으로 시작합니다.
itemsfile version 3
620
이것을 기록하는 process_items.py
에는 다음 내용이 있습니다.
def write_items(variable_list,variable_uses,tag_uses,quick_strings):
itemkinds_file_name = export_dir + "item_kinds1.txt"
ofile = open(itemkinds_file_name,"w")
ofile.write("itemsfile version 3\n")
ofile.write("%d\n"%len(items))
# ...
ofile.close()
즉, itemsfile version 3
는 기록 형식을 지정하는 것으로 추정할 수 있고, 아랫줄 620
은 전체 아이템의 수를 나타냅니다.
아이템 정의
헤더부분을 넘어가면 다음부터는 아이템 정의가 이어집니다.
ofile.write(" itm_%s %s %s %d " % (
convert_to_identifier(item[0]),
replace_spaces(item[1]),
replace_spaces(item[1]),
len(item[2])
)
)
아이템을 정의하는 첫 부분입니다. module_items.py
의 주석을 살펴보니 처음 문자열은 itm_
으로 시작하는 아이템의 ID로 사용하는 문자열이고, 두번째와 세번째는 명칭을 나타내는 듯 합니다. 반복의 이유를 알 수 없네요. 네 번째는 사용하는 매쉬의 갯수 입니다.
item_variations = item[2]
for item_variation in item_variations:
ofile.write(" %s %d "%(item_variation[0],item_variation[1]))
이렇게 리소스 파일에서 가져온 매쉬의 이름과 매쉬가 사용되는 상황을 의미하는 코드쌍을 열거합니다.
아이템 스펙
ofile.write(" %d %d %d %d %f %d %d %d %d %d %d %d %d %d %d %d %d\n" % (
item[3], # 아이템 플래그 (종류)
item[4], # 사용할 동작
item[5], # 아이템 가치 (가격)
item[7], # 가능한 변형 (무거운, 가벼운, 강한 등)
get_weight(item[6]),
get_abundance(item[6]),
get_head_armor(item[6]),
get_body_armor(item[6]),
get_leg_armor(item[6]),
get_difficulty(item[6]),
get_hit_points(item[6]),
get_speed_rating(item[6]),
get_missile_speed(item[6]),
get_weapon_length(item[6]),
get_max_ammo(item[6]),
get_thrust_damage(item[6]),
get_swing_damage(item[6]),
)
)
이번에도 module_items.py
의 주석을 참고했습니다. 아이템 스펙나열이 끝나면 다음 줄로 넘어갑니다.
트리거와 팩션
트리거는 특정 사건과 아이템을 연결할 때 사용합니다. 퀘스트에서 또 만날듯한 속성이네요. 팩션은 특정 문화권을 가진 상인들만 판매하도록 설정하는 것입니다.
if (len(item) > 9):
ofile.write(" %d\n"%(len(item[9])))
for item_faction in item[9]:
ofile.write(" %d"%item_faction)
ofile.write("\n")
else:
ofile.write(" 0\n")
여기서는 판매 가능한 팩션을 나열하고 다음 줄로 넘어갑니다.
save_simple_triggers(ofile,trigger_list, variable_list,variable_uses,tag_uses,quick_strings)
def save_simple_triggers(ofile,triggers,variable_list, variable_uses,tag_uses,quick_strings):
ofile.write("%d\n"%len(triggers))
for trigger in triggers:
ofile.write("%f "%(trigger[0]))
save_statement_block(ofile,0,1,trigger[1] , variable_list, variable_uses,tag_uses,quick_strings)
ofile.write("\n")
ofile.write("\n")
트리거를 나열하는 함수는 process_operations.py
에 정의되어 있습니다. 트리거에 대한 내용은 나중에 중급자 코스 들어갈때 파보도록 하겠습니다.
여담
아이템 이름 번역
아이템 이름의 번역은 모드/languages/ko/item kinds.csv
에서 itm_
시작하는 아이템 코드를 기준으로 이루어집니다.
itm_horse_meat|말고기
itm_horse_meat_pl|말고기
itm_practice_sword|훈련용 검
itm_practice_sword_pl|훈련용 검
...
import *
from process_common import *
from header_common import *
from header_operations import *
모듈 시스템의 임포트는 다 이딴 식이라 인텔 센스도 정의 추적기도 동작하지 않아서 심하게 애먹었습니다. 착하고 파이소닉한 여러분들은 절대 이런 짓을 안했으면 합니다.
'종료한 프로젝트 > mount&blade(종료)' 카테고리의 다른 글
mount & blade 모딩: 아이템 클래스의 구조 (0) | 2019.11.28 |
---|---|
mount & blade warband 모딩: 아이템 플래그 (0) | 2019.11.27 |
mount & blade warband 모드 개발: WRECK, 향상된 컴파일러 키트 (0) | 2019.11.25 |
mount & blade warband 모드 개발: 모드 적용하기 (0) | 2019.11.24 |
mount & blade warband 모드 개발: 모듈 시스템의 파일 시스템 (0) | 2019.11.24 |
댓글