mount & blade 모딩: 아이템 플래그 (2)
반응형
이전 글 "mount & blade warband 모딩: 아이템 플래그"에서,
0x0001000~0xFFFF000는 보조속성입니다. 추정입니다만, 이 속성은 복수로 선택할 수 있습니다. 값이 1, 2, 4, 8이니 2진법으로 보면 각각 다른 자릿수거든요.
라고 했었습니다. 이 부분을 직접 확인하고 해결해 보도록 하겠습니다.
각 자릿수의 플래그를 판단하는 방법
if flag_digit == 1:
pass # 1
elif flag_digit == 2:
pass # 2
elif flag_digit == 3:
pass # 1, 2
...
elif flag_digit == 15:
pass # 1, 2, 4, 8
이것은 하나의 16진법 자릿수 flag_digit
의 값에 따라 각각의 플래그를 조합해서 사용했을 경우까지 생각해 1부터 15까지 모든 수에 대응하는 규칙을 만드는 방법입니다. 그런데, 앞에서는 비트연산을 사용해놓고 지금은 굳이 이래야 하나 싶습니다.
16진법과 2진법
앞서 플래그를 분해할 때 사용한 AND(A & B
), OR(A | B
)등 비트연산에 들어가는 값은 16진수를 사용하지만 비트연산자는 2진수 연산을 기본으로 합니다. 그러므로, 이전 글에서 플래그를 자릿수별로 분해할 때 사용했던 & 0xFF
는 사실 & 0b1111 1111
를 기준으로 계산한 것입니다.
2진법 | 16진법 | 2진법 | 16진법 | |
---|---|---|---|---|
0b0000 | 0x0 | 0b1000 | 0x8 | |
0b0001 | 0x1 | 0b1001 | 0x9 | |
0b0010 | 0x2 | 0b1010 | 0xA | |
0b0011 | 0x3 | 0b1011 | 0xB | |
0b0100 | 0x4 | 0b1100 | 0xC | |
0b0101 | 0x5 | 0b1101 | 0xD | |
0b0110 | 0x6 | 0b1110 | 0xE | |
0b0111 | 0x7 | 0b1111 | 0xF |
비트연산 사용
파이썬의 장점 중 하나는 몇 진법으로 표현했는지에 관계없이 모든 int끼리의 연산을 지원한다는 점입니다. 이를 이용해서 다음과 같이 4개의 조건문으로 끝낼 수 있습니다.
if flag_digit & 0b0001:
# 플래그 1 사용
if flag_digit & 0b0010:
# 플래그 2 사용
if flag_digit & 0b0100:
# 플래그 4 사용
if flag_digit & 0b1000:
# 플래그 8 사용
반응형
'종료한 프로젝트 > mount&blade(종료)' 카테고리의 다른 글
mount & blade 모딩: 아이템 클래스의 구조 (0) | 2019.11.28 |
---|---|
mount & blade warband 모딩: 아이템 플래그 (0) | 2019.11.27 |
mount & blade warband 모드 개발: 아이템 코드 따라가기 (0) | 2019.11.26 |
mount & blade warband 모드 개발: WRECK, 향상된 컴파일러 키트 (0) | 2019.11.25 |
mount & blade warband 모드 개발: 모드 적용하기 (0) | 2019.11.24 |
댓글