기본 콘텐츠로 건너뛰기

추천 가젯

Tmux 환경에서 Vim 컴파일 시 발생하는 termio/termios 감지 오류 해결 방법

 리눅스 환경에서 소스코드를 직접 빌드하다 보면 의외의 환경 변수나 터미널 세션 설정 때문에 엉뚱한 빌드 에러를 마주할 때가 있습니다. 대표적인 예로 Tmux 세션 내부에서 Vim 소스를 컴파일할 때 발생하는 termio/termios 감지 오류 가 있습니다. 이번 글에서는 해당 에러가 발생하는 원인과, 단순한 clean 으로는 해결되지 않는 이유 및 올바른 해결 방법을 정리합니다. 1. 문제 원인 Vim의 소스 코드 빌드 과정( configure )은 시스템이 System V 계열인지 Linux 계열인지 판별하기 위해 termio.h 와 termios.h 헤더 파일 및 터미널 인터페이스를 검사(Probe)합니다. 하지만 Tmux 내부(세션 안)에서 컴파일을 진행할 경우 , Tmux가 제공하는 PTY(Pseudo-Terminal) 환경과 TERM=screen 등의 특수한 환경 변수 영향으로 인해 Autoconf가 터미널 인터페이스를 검출하는 과정에서 오동작을 일으킵니다. 그 결과, 실제 시스템 조건과 무관하게 설정 에러를 발생시키게 됩니다. 2. 왜 make clean 으로는 해결되지 않을까? 일반적인 개발 과정에서는 빌드가 꼬였을 때 make clean 을 실행하곤 합니다. 하지만 make clean 은 컴파일된 오브젝트 파일이나 바이너리( .o 파일 등)만 삭제할 뿐, Autotools가 시스템 환경을 탐색한 결과로 남긴 캐시( config.cache 또는 내부 매크로 변수)나 설정 파일들은 그대로 유지 합니다. 일반적인 상황에서는 시스템의 하드웨어/OS 정보가 바뀌지 않기 때문에 이 잔여물이 문제가 되지 않습니다. 그러나 Tmux나 Screen 같은 터미널 멀티플렉서 환경에서 탐색된 왜곡된 정보가 캐시에 박혀버리면, 나중에 Tmux 외부(일반 터미널)로 나와서 빌드를 시도해도 이전의 오염된 캐시 때문에 계속해서 오류가 발생하게 됩니다. 3. 해결 방법 이 문제를 해결하기 위해서는 반드시 Tmux 외부 환경 에서 기존의 오염된 설정 파일을 ...

외교술이 게임 프로그램 내부에서 어떻게 작동하는가? (for HoMM III 3.2 & 4.0)

이 글은 http://heroescommunity.com/viewthread.php3?TID=28341 의 글을 구글번역기로 번역한 후 한국인이 읽기 쉽도록 수정한 글입니다.
일단 해당 글도 비판을 받은 부분이 있으니 잘 보시기를 바랍니다.

외교술이 어떻게 작동하는가? (for HoMM III 3.2 & 4.0)

(변수가 많아서 변수를 설명하고 있다. )

1. [Hero_Power]

영웅의 1차스킬 전투능력이 중요하다.
Hero_Power = sqrt ((1 + 0.05 * Attack) * (1 + 0.05 * Defense)); 

2. [Total_Army_Power]

영웅 군대의 총 힘은 영웅과 군대의 힘을 곱한 후 소수점을 버림으로 이루어진다. 
같은 수준의 군대라도 마력영웅이 조금 더 불리하다. 
Total_Army_Power = floor (Hero_Power * Army_Power); 

Army_Power는 아래 링크에서 Fight Value와 유닛의 숫자를 곱한 후 합한 값을 생각하자. 
http://heroes.thelazy.net/wiki/AI_value
점수만 보고 생각할 때, 피닉스가 주당 4기에서 2+1기로 HoTA에서 패치 되었는데, 
피닉스가 아니라 고스트드래곤에게 그런 기회가 와야한다고 생각한다. 아니면 해골변환기에서 좀비를 해골용 뼈 부속으로라도 변환이라도 좀 시켜줬으면... 


3. [k]

k = Total_Army_Power / Neutrals_Power;
 k 값은 서로의 군대의 전투능력의 비를 나타낸다.

4. [Power_Factor] (fixed)

Power_Factor = 11 if k >= 7;
Power_Factor = floor(2*(k - 1)) if 1 <=;= k < 7;
Power_Factor = -1 if 0.5 < k < 1;
Power_Factor = -2 if 0.333 < k <= 0.5; 
Power_Factor = -3 if k <= 0.333;

주의: 0.333은 333/1000을 의미하지 , 1/3을 의미하지 않는다. 
Now I am sure.(확신하단다)

 5. 동정이라고 번역되지만 동질감이 좀 더 해석이 용이 하겠다. [Sympathy]

영웅의 군대에 중립유닛과  같은 종류의 유닛이 존재하는가가 핵심이다. 0과 1사이가 굉장히 크기때문에 멍청한 컴퓨터의성을 점령한 후 주위에 남아있는 고위 유닛은 한마리라도 어디서 보충을 해서 공격하자.

Sympathy = 0 ;영웅의 군대에 중립유닛과 같은 유닛이 존재하지 않을 때.

Sympathy = 1 ;적어도 한종류의 유닛이 중립유닛과 같은 종류일 때, 같은 종류라는 것은 업그레이드, 다운그레이드 관계에 있는 유닛을 말한다. 
Sympathy = 2 ; 같은 종류인 영웅의 유닛이 다른 유닛의 비해 압도적으로 많을 때 포트리스 군대이지만 놀이 압도적으로 많다면 중립 놀군대는 좀 더 영웅의 군대에 합류하고 싶어진다.  그 압도적인을 어떻게 수적 표현으로 나타낼지는 모른다. 
if total number of creatures (or their upgrades/downgrades) of the same kind as neutrals in hero's army are strictly bigger than number of all the other beings in the army;
주의 다음은 합류계산에만 작용한다. 
  길에 있는 중립유닛들 중에 모든 정령류가 들어갈 수 있는 유닛이 있는가 보다. 합류계산에 있어서 공기의 정령을 업그레이드 해서 계산할 때는 땅, 물, 불 정령은 할 수 없다.  그리고 폭풍의 정령을 다운그레이드해서 계산할 때도, 마그마, 얼음, 에너지 정령은 그렇게 하지 못한다. 2레벨 유닛이 숫자가 가장 많으니  컨플럭스를 만들면서 페널티를 준듯하다. 


6. [카리스마 (Ch)]  

Ch = Power_Factor + Diplomacy_Level + Sympathy;


7. [공격성 (X)] (작을 수록 합류)

X = -4 (always)  완전 중립
X = 10 (always) 야만적 중립 
X in [1,7] for 친근한 중립 
X in [1,10] for 공격적 중립;
X in [4..10] for 적대적 중립;
 정수일 것으로 생각된다. 이 값은 새로운 게임을 시작할 때, 저 값 사이의 값으로 난수발생기로 정해진다. 


이제 부터 계산에 들어간다. 

8. 카리스마가 공격성보다 약하면 싸운다.  (Ch

9. 카리스마가 공격성보다 크거나 같다면 다양한 선택지가 생긴다. (Ch>=X)

  • Sympathy + Diplomacy_Level + 1 >= X 이면 중립유닛이 공짜로 합류한다. (같은 수준의 전투력인 군대가 카리스마가 있다고 가정한다. 중요한 것은 이과 정은 9번과정을 거치고 나서를 말한다. 일단 군대로 겁박하는 것이 중요함.
  • 9-1이 아닐 경우 Sympathy + 2*Diplomacy_Level + 1 >= X, 외교술 레벨에 2를 곱한 후, 돈으로 합류를 요구한다. 여기에는 이 중립유닛을 사는데 필요한 총 gold를 말한다. 자원은 요구하지 않는다. 
  • 합류를 거절 했을 때,  Ch>X일 경우는, 중립유닛을 내쫓거나, 공격할 수 있다. 
  • 합류를 거절 했을 때, Ch=X일 경우는 공격당한다. 연립해서 구할 수 있다.  외교술 없이 비슷한 수준의 군대인데, 공짜로 합류한다는 경우나, 군대가 많이 약하지만 외교술로 어거지로 돈으로 구매해서 살 수 있는 경우, 거절하면 항복하거나 죽어야 한다는 것을 명심하자.
쉬움 난이도에서는 모든 영웅은 숨겨진 외교술 기술을 가지고 있다. 기술 없을 때 1, Basic일때 2, advance 및 Expert는 3으로 여전히 최대 3이다.  쉬움 난이도가 아닐 때는, 외교술이 없는 영웅은 계산식을 볼 때, 돈으로 중립유닛을 살 수 없다. 

그외 답변에서 알 수 있는 정보들, X값인 10일 때는 절 대 합류 할 수 없다.
동질감 (2) + 2*3(외교술 전문가) +1  = 9 < 10. 퇴각은 시킬 수 있다. 

댓글