이 블로그 검색

2020년 8월 24일 월요일

Linux Desktop 에서 F13-F24키 셋팅하기.vim 으로 파일 수정.

오래전 PC가 아주 비싸던 시절에는 당연히 키보드가 비싸도 티가 안났고, 대량생산을 통해 단가를 낮출 필요가 없었다.

어차피 전체 영역에서 키보드가 얼마나 차지하겠는가. 그러다보니 참 다양한 키보드가 존재한다. 

google에 IBM keyboard F24라고 검색을 해보라. 크고 아름다운, 2줄 기능키가 등장한다. 거기다가 들어본 적도 없는, 수많은 특수 키들이 좌측에 자리잡아 있는 것을 볼 수 있다. 

그런데 현실은? 인기있는 키보드 몇말고는 50달러 이상 가는 것도 잘 없다. 

그러면 뭔가 표준스러운 한가지 모델로 모두가 통일해서 공장에서 대량생산을 하는 방법으로 간다. 고로 역사적으로 사라진 수많은 키들이 있다. 

그 중의 하나가 F13-F24키이다. Apple키보드의 경우에는 F13-F15가 프린트스크린 스크롤락 멈춤 자리에 가 있는 경우도 있고 심지어 넘패드 윗쪽으로 F16-F18,F19  3개 또는 4개가 있는 경우가 있지만, 뭐 여전히 마이너 하고, F15까지 있는 키보드는 모양 자체는 별차이가 없다. 

애플키보드라는 놈이 있다보니, 종종 그래도 쓸 수 있는 키보드다. 고로  F키의 경우는 아직도 GUI 개발용 라이브러리에서 대부분 지원한다. 지원하지만 아무것도 맵핑 되어 있지 않을 뿐이다. 

그러면 어떻게 이 들을 사용할 수 있을까, 소위 윗글쇠라 부르는 ⇧Shift (ISO Level 2 Key) 를 사용할 수 있다. 위키피디아를 보니, Modern windows keyboard(??)의 경우는 그렇게 사용한다고, 한다. 


수많은 어플리케이션들이 범람하다보니, ctrl, alt, win,shift 조합을 매우 많이 하게된다. 이미 우리가 알고 있는 키들은 내가 사용하지 않더라도 누군가가 사용할 컴퓨터에서는 이미 사용되고 있을 수 있다.   

이럴 때는 어떻게 하나... ISO_LEVEL 3 Shift Key를 사용하면 된다. 보통은 AltGr키라고 많이 부르는데, 문자영역에서 Shift외의 더 많은 키가 필요할 때 많이 사용된다. 영어 키보드에서 다양한 유럽어 키보드로 바꿔야 할 때 많이 사용한다. 독일어만 해도, 모양이 다른건 ß나 öäë 정도 말고는 필요하지 않지만, 대소문자로 나뉘어 있으므로 shift키는 쓸 수 없으니 잘 안쓰는 오른쪽 alt를 변형헤서 사용하는 방법 중 하나이다. 

아니면, Scroll Lock키를 사용해도 된다. (다 그런지 모르겠는데 Scroll락 키는 있지만 그냥 일반 키처럼 작동하고, LED도 스위치로도 따로 조정하지 않으면 작동을 안했다. )  

리눅스 윈도우 매니저가 엄청나게 가볍지만 않다면, 설정에 들어가 키보드 설정에서 할 수 있다.  아마 이미 왼쪽 CapsLock을 ctrl로 쓰는 등으로 할 줄 알거라 생각한다. 

AltGr을 쓰려면 위에서 방법을 찾아보고 없으면,  keyboard profile에 AltGr이 들어간 친구를 열심히 찾으면 된다. 그러면 오른쪽 Alt는 AltGr로 작동한다. 관련 글은 다음에 쓰도록 하고, 이 키를 통해 altgr F1을 F13으로 사용해 보도록 하자. (내가 쓰는건 US. International AltGr. with Dead Key 였던가)

분명히 root를 사용하지 않고 쓰는 방법이 있을텐데 그건 나중에 찾아서 고치도록 하고, 나는 다음처럼 사용한다.

/usr/share/X11/xkb/symbols/srvr_ctrl 파일을 열어 다음처럼 수정한다. 

vim 명령을 사용하면 단숨에 가능.

:g/^\s*symbols/s/F\(\d\+\), .*F\(\d\+\), .*F\(\d\+\), .*F\(\d\+\),/\="F". submatch(1).", F".submatch(2).", F".(subm
atch(3)+12).", F".(submatch(4)+12).","/

symbols로 시작하는 줄에서 F숫자, 4개의 조합으로 이루어진 것을 모아다가, 첫번째꺼는 그대로, 3번째 4번째는 12를 더하도록 만들었다.   이걸 사용하고 level3를 사용할 수 있는 상태로 만들었다면,

level3+F1 은 F13으로 작동한다. apple키보드를 기본베이스로 하지 않는이상 아무작동도 없으므로 단축키로 쓰기 알맞다 

13   type="CTRL+ALT",
14   symbols[Group1]= [ F1, F1, F13, F13, XF86_Switch_VT_1 ]
15     };
16  
17     key <FK02> {
18   type="CTRL+ALT",
19   symbols[Group1]= [ F2, F2, F14, F14, XF86_Switch_VT_2 ]
20     };
워낙은 X-window상에서 ctrl+alt+F{1..12}로 가상터미널을 여는 키로 쓰러고 만들어 놓은건데

들어와서 Level3과 Level4가 Level1,Level2와 동일하게 F1,F1,F1,F1로 되어 있는것을 12씩 더해서 수정해 놓은 것이다. 

위와 같이 설정하면 ISO Level 3 Shift키를 누를경우 F13등을 사용할 수 있게 되고.  Shift키까지 누를경우도 문제 없이 조합하여 사용가능하다. 

단축키 설정이야 항상 내맘대로 할 수 있는 방법이 있지만, 겹치지도 않아야 하고 재사용하기 쉬어야 하기 때문에, Level 3 Shift와 펑션키를 이용하면 아주 좋다. 

일단, 맥이 아니므로 이미 사용되는 경우가 없다. 펑션키는 크기 3부분으로 4개씩 분류가 되어있어 사용이 용의하다. 예를 들면 트리플 모니터를 쓰는데 각 모니터별로 회전을 시킨다거나, Blender 등에서 XYZ축의 회전값을 0,90,180,270로 즉시 변환한다거나 하는 식으로 사용할 수 있을 것이고, 재사용때 잊어 먹어서 못쓰는 경우도 보기 어렵게 잘 할 수 있다. 

뭐 어떻게 쓰는건 자유지만, 지금 막 바꾸어서 머리속으로 말고는 막 자랑하기는 어렵다. 


AltGr키는 지금 Compose라는 키랑 더불어 오른쪽 alt ctrl을 바꾸어 사용하고 있는데, 매우 유용하다. 이걸 더 어떻게 활용할까 하다가 F키가 24까지 있다는 소문에 조금 확장해 보았다. 

새로 글을 파겠지만, 현재 어떻게 쓰고 있냐면, AltGr+g 를 누르거나 순차적으로 compose,g를 누르면  <dead_greek>키가 작동하고, 이상태에서 알파벳키를 누르면 해당하는 그리스어 알파벳이 나오도록 하였다.
(어떻게 설정했는지는 모르겠지만, 이 그리스어 알파벳이 kile이라는 Latex 작성 툴에서 \alpha와 같은 방식으로 바로 나온다. ..  .. )

αβδεφγηκ  이거 말고도 다양한 dead키가 있는데, 위에 점이 있거나 모자가 있거나 한 단어들을 입력할 수 있고, 이거 전부 내가 마음대로 설정할 수 있어서 제대로 다루고, 설정을 그대로 잘 옴기면 평생 키보드 재미있게 쓸 수 있다. 다음에 따로 작성한다. 

2020년 6월 12일 금요일

랑그릿사2 스펠 정리.

스펠 데미지 정리 

LvMRngMLv
1
2+1
3
4+1+1
5
6+1
7
8+1+1
9
10+1

Reference : https://strategywiki.org/wiki/Langrisser_II/Spells

랑그릿사의 마법시스템은, 마법 사용자의 레벨만 가지고 따진다. 
위저드가 더 강한마법을 쓴다거나, 나이트가 마법이 약하다거나 그런건 없다.

이 레일이란 말은 Tier까지 포함한 말이다. 

표에서 나오는 것 처럼, LV이 4, 8에 도달할 때 마다 범위마법의 범위가 1씩 늘어난다. 마법 사거리까지 포함하는지는 나중에 확인 후 고친다. 

또 마법LV인 MLV이 2,4,6,8,10에 도달할 때, 1씩 늘어난다. 

또  Tier에 따라서 +1씩 또 늘어난다고 한다. 하지만 지금 참조한 페이지는 통합 되어 있다. 

예를 들어 워락은 나이트,+0, 실버나이트 +1, 하이랜더 +2 나이트마스터 +3
이런 식이다.  

소환수들과 용병들은, 개발자가 제대로 고려를 하지 않아서, 데몬로드 같은 친구들은 1티어라... 마법 범위가 그 모양이다. 그래도 이 친구들도 레벨은 가지고 있으니, 최종 레벨이 되면 약간의 보너스는 얻는다. 
 Spell    Formula   Range  Cost Special (MDmg)
매직에로우0 + MLv*2  5 1 
 Blast20 + MLv  2 10 
 Fireball3+ MLv  4/3 2 
 Meteor10 + MLv  10/2 8 
 Thunder5 + MLv  7 4물위의 적 +1 보너스 
 Tornado4 + MLv*2  0/3 2비병에게 +1보너스 
 Blizzard4 + MLv*2  0/4 3 
 Earthquake10 + MLv*2  0/5 12 공중유닛 무피해.

매직에로우는 파이어볼보다 강할 수 있다. 다만 그래봐야 큰 차이는 나지 않는다. 

블라스트는 매우 강력한 대신, MLv에 따른 차이가 거의 없다. 

파볼은 가장 기본적인 범위 마법이지만, 매직에로우보다 기본 데미지가 강하다.  뭔가 게임 설계가 잘못 되었다. 

메테오는 강력한 기본데미지를 가지고 있는 범위 마법이다. 

썬더는 물위에 유닛에게 더 많은 데미지를 주는 부대단위 마법이다. 극초반에는, 파이어볼보다 더 많은 데미지를 줄 때가 있다. 

토네이도는 시전자 중심으로 사용하는 마법이다 보니, MLv추가 공식이 조금 다르다. 배우기 어려운 것이 단점이다.  범위가 블리자드보다 조금 작고, 비병에게 추뎀이 들어가서 뭔가 또 설계가 잘못되었다는 것을 알 수 있다. (마나소모가... 작음.)

블리자드는 토네이도보다 마나는 많이 쓰지만,  같은 데미지를 준다. 이상한 마법이지만, 쉽게 배울 수 있다. 설계미스인 것 같은 느낌이다. 

어스퀘이크는 메테오와 같은 기본데미지에 시전자 중심 마법특징인 추가데미지를 가진 마법이다. 사용시 노포병은 죽었다고 봐야한다. 


실제 적용 

실전에는 저 데미지가 그대로 들어가는 것이 아닌, 각 유닛의 마법 방어력, 레지스트 마법, 착용 아이템에 따라 데미지가 변화되어 적용된다. 

유닛별 기본 마방인 MDF
그리고 보너스 MDF

최종 마법 방어력은 다음과 같다 . 

total MDF = MDF + bonus MDF  x 2 
이 값이 100을 넘으면, 마법에 완전 면역을 얻게된다. 

만약 [0,100) 사이의 값이라면 다음과 같은 공식을 적용한다. 

=Max( Integer((( 100 - (total MDF) ) * MAT ) / 100 ) + MDmg , 1 ) 

면역이 아니라면 무조건 1의 데미지는 입는다. 위에 Integer는 내림연산으로 정수값만 얻는 것이다. 마법 저항력이 1이라도 있으면, 데미지를 1은 줄일 수 있다. 

버그로 인해, 아뮬렛을 착용한 지휘관은 100을 넘어도 아래식만 적용해 1의 데미지를 입는다. 


변수 

Resist Spell : 비용2 사거리 8 부대단위, MDF+25


2020년 5월 26일 화요일

VIM 환경을 위한 fcitx 설정. ESC를 누르면, 비활성화 되도록,


fcitx는 비활성화 상태가 1번 IM이다.

데스크탑에서는 "미국 영어(국제, AltGr DeadKey포함)"으로
랩탑에서는 "미국 영어" 또는 "한국어 104key"로 설정한다.



두번째 칸은 원하는 한글입력기로 설정한다. 나 같은 경우는 신세벌 P2방식이다.
(갈마들이를 이용해, 공세벌식 비스무리한걸 숫자키 영역 침범 없이 해결)




한글을 입력하다 보면, vim에서 사용하는 i, o,v, y, p 같은 키들을
노말모드에서 사용하려고 할 때,

한글이 나와서 낭패를 보는 일이 많다.


이것을 해결하는 방법은 여러개가 있다.

1. vim상에서 자체적으로 한글입력을 탑재하게 하여 입력모드시에만
    IM이 작동하도록

2. vim에서 esc버튼을 누르면, xim에 IM disable message를 보내도록 하는 방법

3.  사용하는 IM자체적으로 ESC를 누르면 그렇게 되도록.


아래는 삽질의 결과물들이다.  그냥 2번으로 하자.  vim8이나 nvim을 쓰면서,  python3-dbus 와 같은 패키지가 필요할 것이다. 쉘에다가 바로 보내는 것도 해봤는데, 화면에 글자가 안보이는 등 이상한 결과들이 나온다. 그리고 먼가 filter로 사용할 때 말고는, 제대로 작동이 되는지도 의문이 생겨서 python으로 dbus call을 하도록 한다.

.vimrc에 다음과 같이 입력한다.


흠 특수문자들이 날아가서 그림으로 보이도록 하겠다. 를 쓰면 작업이 많음.


아래쪽은 삽질의 기록이다.

2020년 2월 11일 화요일

한눈에 보는 Blending mode 색섞기. (on GIMP)



Top Layer


Bottom Layer


일단 다음처럼 두개의 레이어를 만들고, 여러 효과를 넣어본다.
편의상 여기서는 integer 8bit 로만 나타내며 0-255로 표현한다.
gimp 최신버전 코드를 깟는데 float로 계산한다.

가장 많이 쓰는 Screen 과 overlay 그리고 Multiply(곱)
Screen
Overlay

Multiply












in이 top이고 layer가 바닥이다. 
comp[c] = in[c] * layer[c];

0-1값으로 생각하면 쉽게 어두워짐을 알 수 있다.  이 다음부터는 그림만가지고 이야기한다.

그림은 많이 쓰이는 순서이지만 설명은 Multiply부터 하는 것이 쉽다.



comp[c] = 1.0f - (1.0f - in[c]) * (1.0f - layer[c]);
Screen은 반전 후 곱한 색상을 반전하는 것과 같다.  반대로 좀 더 밝아 짐을 볼 수 있다.


Overlay부터는 top layer와 bottom layer가 서로 동등하지 않다. 일단 normal모드 부터 동등하지 않으므로 이상한 것은 아니다.
if (in[c] < 0.5f)
      val = 2.0f * in[c] * layer[c];
else
     val = 1.0f - 2.0f * (1.0f - layer[c]) * (1.0f - in[c]);
무언가 복잡하다.  Screen과 Multiplay의 중간 느낌이다.
아직 메뉴얼은 그대로지만 photoshop으로 대동단결 했다.
Hard light에서 복사해오자.

Top Layer를 흰색에서 회색, 회색에서 검정 두부분으로 나누어,  어두운곳은 Multiply효과를  밝은 곳은 Screen효과를 준다. 
중간영역의 대비가 커진다. 그 결과 색상이 강해지고, 경계가 날카로와 진다.


다음은 LightenOnly와 DarkenOnly이다.
각값에서 밝은 값과 어두운 값을 취한다.
comp[c] = MAX (in[c], layer[c]);
comp[c] = MIN (in[c], layer[c]);






















다음은 Burn과 Dodge이다.

Dodge
   256 x B / { (255-T} +1 }
comp[c] = safe_div (in[c], 1.0f - layer[c]);


Burn
255- 256x (255-B)/{ T+1}
comp[c] = 1.0f - safe_div (1.0f - in[c], layer[c]);
Dodge의 반대로 작용한다.

Linear burn
그냥 덧셈이다. clipping이 될 수 있다. 
            comp[c] = in[c] + layer[c] - 1.0f;


다음은 조명 계통이다.  
Hard light, soft light, vivid light pin light 등이다. 

Hard light
 255 - (255-2(T-128)) x (255-B) /256   if T > 128
  2 x T x B                                             if T <=128

Top Layer를 흰색에서 회색, 회색에서 검정 두부분으로 나누어,  어두운곳은 Multiply효과를  밝은 곳은 Screen효과를 준다. 
중간영역의 대비가 커진다. 그 결과 색상이 강해지고, 경계가 날카로와 진다.
 if (layer[c] > 0.5f)
{
     val = (1.0f - in[c]) * (1.0f - (layer[c] - 0.5f) * 2.0f);
     val = MIN (1.0f - val, 1.0f);
 }
 else
{
      val = in[c] * (layer[c] * 2.0f);
      val = MIN (val, 1.0f);
}
 Overlay와 동등한 식이지만, 기준이 bottom layer이다. in <-->layer를 하면, 같다. xy축을 바꾸면 바로 알 수 있다. 
Soft light
이름과 달리 Hard light와는 별관련이 없다.  Screen Mode와 매우 유사하다.

멏몇 버전의 GIMP에서는 Screen과 같다. ( 계속 다시 옜날로 가는 경우가 있나보다. )

스크린된 Pixel을 S라고 하자. 

S= 255 - (255-T) x (255-B) / 255

{  (255-B)xT + S} x B / 255   이다. 다만 홈페이지에 오류가 있는 것으로 보인다. 앞항도 255로 나누어야한다. 

무언가 식만 보고 이해하기는 어렵다. 그리고 제대로 적용될지 확신할 수 없기에 쓰면 안될 것으로 보인다. 나머지는 gimp의 코드를 까봐야할 것 같다. 
일단 여기까지 작성하자. 

gfloat multiply = in[c] * layer[c];
gfloat screen   = 1.0f - (1.0f - in[c]) * (1.0f - layer[c]);
gfloat val      = (1.0f - in[c]) * multiply + in[c] * screen;

상위 픽셀에 따라, multiply와 screen을 얼마나 섞을지 정한다. 


Vivid light
if (layer[c] <= 0.5f)
{
     val = 1.0f - safe_div (1.0f - in[c], 2.0f * layer[c]);
     val = MAX (val, 0.0f);
}
else
{
     val = safe_div (in[c], 2.0f * (1.0f - layer[c]));
     val = MIN (val, 1.0f);
}

Overlay처럼 구간을 나누어, dodge와 burn을 적용한다.

Pin light

이것은 lighten과 darken을 조합하는 것 같다.
 if (layer[c] > 0.5f)
                val = MAX(in[c], 2.0f * (layer[c] - 0.5f));
              else
                val = MIN(in[c], 2.0f * layer[c]);



Linear light

if (layer[c] <= 0.5f)
     val = in[c] + 2.0f * layer[c] - 1.0f;
else
     val = in[c] + 2.0f * (layer[c] - 0.5f);
그렇다.




더하기 .

comp[c] = in[c] + layer[c];






빼기, 차이 






2019년 9월 28일 토요일

히어로즈 메뉴얼 정리된거 보다가 혹했으나 아닌 내용.


망각 마법이 걸린 유닛은 근거리 패널티가 없는 유닛도 생긴다고 적혀 있으나, 컴플리트 버전, hota1.5.4에서는 그렇지 않다는 것을 확인함.

타이탄한테 걸어보았으나... 그런거 없었음.

관련 글보니 영문커뮤니티에 관련 내용이 있으나, 거긴 법사할배로 한 내용이라 알아볼 예정.

2019년 9월 10일 화요일

음 ??? 도대체 USB-MIDI 인터페이스는 왜 만든거야??"?

https://www.gearslutz.com/board/electronic-music-instruments-and-electronic-music-production/1112683-do-usb-midi-interfaces-send-midi-faster-than-midi-spec-2.html

단순히 입출력을 한 선으로 처리하려고 한건가...


사람들이 USB랑 DIN 인터페이스 속도차이를 가지고 막 이야기를 하고 있는데


usb-midi 스펙 작성자가 나와서 결론을 내주는데...



daw상에서 미디로 떠있는 친구들은 호환성을 위해서 31.25kbit이상의 패킷 전송을 안한다고 해버리는구만...




뭐 그래서인지... DAW상에서 MIDI가 아니라 그냥 장치이름으로 바로 인식해서 쓰여지기는 하더만... 이게 무슨 짓거리인지...

USB를 쓰는 이득이 없는데 왜 USB???

MIDI 2.0에서는 이게 개선되는것은 맞는건가???



아니면 작성자도 제대로 모르는건가???

과연 DIN MIDI 정도의 속도로 MIDI Wind Instrument의 데이터를 처리할 수 있나??

뭐여

2019년 7월 8일 월요일

2019년 6월 28일 금요일

2019년 6월 27일 - 뉴스.

양현석은 어떻게 내사종결될 것이라는 사실을 알고 있었을까???

블러핑일까? 경찰에서 내부정보가 새고 있는 것일까???
http://imnews.imbc.com/replay/2019/nwdesk/article/5381596_24634.html

27일 양현석은 조사 받으러 나갔고, 버닝썬 관련 법원 출석이 있었지만 28일 새벽인 현재 YG나 버닝썬관련 기사가 daum 연예 많이 본 뉴스 1-30위까지에 '최종훈 정준영 직업은 무직 '으로 4위에 올라간 것 말고 없다. 

  여기는 차트를 볼 때도, 의심이 갔는데, 조회수를 만지는 어떤 방안을 가지고 있는게 아닐까라는 생각을 한다. 주어는 daum kakao일 수도 YG일 수도 있고 주어가 심지어 없을 수도 있다.

송송 커플 이혼 조정 이야기 

태양의 후예를 안봤고, 송중기 나오는 드라마는 본 적 없고, 송혜교 나오는건 순풍산부인과 밖에 없어서, 관심이 좀 덜 했는데, 하루 종일 언론에서 때려대니까? 강제로 관심이 가게 된다. 이거 뭐임??? 
  거기다, 박보검까지 시끄럽다. 아 박보검 나온 것도 본적이 없다. 

정준영 최종훈 법원 출석 

C.N.Blue 이종현하고, 빅뱅 승리는 왜?? 같이 법원에 출석하지 않았을까??

승리는 조사라도 받았다는 보도가 한달전에 있었지만, 이종현은 군검찰에 수사를 받았는지? 검찰에 수사를 받았는지에 대한 기사가 없다. 

아니 북한 통통배가 강원도로 내려와서, 시끄러운 와중에도, 언론을 잠재우는 카드로 이종현을 사용하지 않은 것을 보면, 그냥 조용히 군 안에서 문제를 지우려는게 아닐까 의심이 든다. 

한국당, 女당원 '바지 내리고 엉덩이춤' 논란..여야 "저질 행태"  

흔한 자유당이 자유당한 사건이다. 

2019년 4월 17일 수요일

시스템 시작시(부팅시) 자동실행된 docker가 바로 실행되지 않는 문제를 어떻게 해결해야 할까??




내가 있는 다체계물리연구실에서 오랜기간 동안, sun grid engine 구축을 노력해왔다. 수많은 시도가 있었지만 tftp를 이용한 diskless grid는 구축을 하지 못했지만,   결국에 유의미한 결과를 얻었다.


Ubuntu내에서 apt로 또는 fedora(오래된 과거)에서 rpm으로는  설치했을 때, 뭔가, 라이브러리의 버전관리 문제가 걸려서 아무일도 일어나지 않는다.


결국은 docker라는 툴을 이용해서, centos를 기반으로 구축을 완료했다.

문제는 각 서버를 재시작할 시, 자동으로 다시 실행되도록 셋팅을 해놓았으나, 그렇지 않는다는 것이다.


네트워크 작업이 귀찮아서, 내부의 docker가 22번 포트를 쓰도록하고, 디바이스는 다른 포트를 사용하도록 해놓은 탓에, ssh로 로그인을 하고, 다시 작업하기는 매우 귀찮다. 그것도 최근에 안 사실이지만 그 작업도, docker 명령을 실행만 하면 되는 작업이다.

이유를 알 수 없지만, docker명령이 최초 실행되기 전까지, docker daemon은 메모리에만 가상 시스템을 올려놓고, 실행은 되지 않고 있다.


지금은 컴퓨터가 작아서 하나씩 들어가서 docker ps 명령을 실행했다지만, 컴퓨터가 많으면 매우 귀찮은 작업일 것이다.

나만 그런가 싶어, 구글링을 해보니 docker에 가장 적합한 CoreOS에도 있는 Bug라고 한다. CoreOS에도 있다는 소리는 그냥 Docker의 버그로 보이며, 어떤 곳에도 원래 그렇게 작동한다는 이야기는 없다.

그래도 각 사람들이 알아서 해답을 찾았고 그 방법을 적용하였다.

그 방법은 정말 간단하다. 그냥 ... systemctl을 이용해 최후단에 단발로 작용하는 데몬 하나를(언어도단이지만)  띄우는 것이다.



[Unit]
After=default.target

[Service]
Type=oneshot
ExecStart=/usr/bin/docker version
RemainAfterExit=yes

[Install]
WantedBy=default.target


이 간단한 것을 생각지 못한다니, 참...유감이다. 

뭐 그렇지만, 이전까지는 왜 docker가 올라와 있는데도 접속이 안되는지에 대해서 고민을 해왔으니, 제대로 문제를 파악한 기간이 짧았던 것으로 변명하면 되지 않을까...

2019년 4월 1일 월요일

Heroes 3 - Editting heroes in memory. 메모리속 영웅 정보 수정하기(히어로즈3)

본 글은 http://heroescommunity.com/viewthread.php3?TID=18817
을 번역하면서 내가 코멘트를 다는 글이다.

>>>가 붙으면 나의 언급이며, >>>가 없다고 해서 내생각이 안들어간 글은 아니다. 왜냐 번역 실력이 형편 없다.

히어로즈3 및 완본, 그리고 크로니클즈 모두 같다.

메모리 에디팅을 위한 프로그램이 필요하며, winhex등을 쓴다.

목록은 불완전하며, 이동력, 마나, 행운, 사기에 대한 정보는 노력하였으나 찾지 못했다.

자원 : 이 정보는 정확히 player 이름의 3line위에서 부터 시작한다.
>> 이 3line은 잘모르겠지만, xxd등을 사용해 본 경험으로 말할 때, 0x30바이트 전을 말한다. 그러므로 정확치 한다. 

(게임 버전에 따라 플레이어 이름은 _omputer, Player 또는 색상이름으로 정해진다. >>> 그냥 문자데이터 시작하는거 잘 찾으면 된다. )

첫번째 엔트리(이걸 우리나라 말로 어케함?)는 나무이며, 5번의 4바이트 단위 뒤로 여러 자원들이 위치하며, 6번째는 gold 금 또는 돈을 말한다.
>>>그러므로 총 자원 정보는 4x6 = 24 bytes 에 정보 0x18만큼의 데이터를 차지한다. WoG 에서 미스릴과 같은 정보가 있는 것을 보면, 남은 공간에 저런 것들을 넣어서 플러그인을 만들지 않았을까라는 생각이 든다. 
캐릭터 정보 ( 1차 기술) : 영웅 이름 첫글자의 4줄 + 1byte 위에 위치하며 각각 1byte를 차지한다. 그리고 화면에 표시될 수 있는 가장 큰 값은 99이다.

마법: 이것은 캐릭터 정보의 바로 우측에 저장된다. 00은 모른다. 01은 안다이다. 몇몇 마법은 수치를 바꾸어도 즉시 안다로 바뀌지 않는다. 가끔 다시 수정하려고 하면, 01byte사이에 00이라는 바이트가 등장한다.

경험치: 영웅 이름의 첫글자의 3줄-2바이트에 위치하며, 4 byte의 정보를 가진다.
>>>부호있는 숫자인지는 모른다. 
유닛: 경험치의 정확히 4줄아래에 7번의 4바이트 정보로 이루어져있다. 유닛타입에 대한 코드는 아래에 첨부한다.

다음 7번의 4바이트 정보로 유닛에 대한 숫자정보가 들어 있다. (너무 큰 숫자를 넣으면 음수로 변한다.
>>> 부호 있는 숫자, 다른 것도 그럴꺼라 추측해보자.
기술(2차): 유닛수량을 따라 바로 오른쪽에 위치한다. 00=not available, 03=expert이며 1바이트당 1개의 스킬이다.

이전부터 아이콘이 없던 기술은 보여지지 않지만 효과가 보여진다. 지혜나, 포술이 적용되는지는 확신은 못하겠다.  시도해보는것은 너의 맘이다.
>>> 음 난 8개 이상의 스킬이 적용되는지가 궁금하다. 다만, WoG나 다른 플러그인들의 경우에는 10개까지도 배우는 경우가 있으므로, 에디터 상으로는 충분히 가능할 것으로 보인다. 화면 보여주는 로직상에 8개로 제한하며, 배울때 8개 이상을 못배우게 되어 있을 뿐으로 보인다. 
기술은 다음순서로 나타난다.
01 Pathfinding
02 Archery
03 Logistics
04 Scouting
05 Diplomacy
06 Navigation
07 Leadership
08 Wisdom
09 Mysticism
10 Luck
11 Ballistics
12 Eagle Eye
13 Necromancy
14 Estates
15 Fire Magic
16 Air Magic
17 Water Magic
18 Earth Magic
19 Scholar
20 Tactics
21 Artillery
22 Learning
23 Offense
24 Armourer
25 Intelligence
26 Sorcery
27 Resistance
28 First Aid
>>> 어딘가 비는 byte가 있을 것이다. 기술도 추가한 플러그인들이 있다. 
아티팩트도 추가할 수 있다.
스킬정보 이후로 약간 뒤에 아주 큰 블록의 FFFFFFF...을 볼 수 있다. 이 값들은 03000000으로 끝난다. 그것은 모든 영웅이 투석기를 가지고 있음을 말한다.

각각의 아티팩트는 8byte를 차지하며, 첫번째 4개 바이트만 사용되며, 나중 4개 바이트는 FFFFFFFF여야만 한다. 만약 당신이 아티팩트를 추가하길 원한다.면03000000유물 이후에 0x8F개만큼 세어라,(8byte블록이겠지) 당신의 백팩에 아티팩트를 추가할 수 있다. 에디팅한 이후에는 장비를 착용하는 것을 잊지말라.  실제 착용슬롯에 추가할 수 있지만, 너무 많은 작업을 해야하고, 잘못된 인공물을 잘못된 술롯에 넣을 시  충돌을 일으킬 수 있다. 슬롯은 투석기앞 어딘가에 있다.
>>>추석기가 착용슬롯의 마지막이다. 

유닛유형 16진수 코드

00000000 - 창병
01000000 - 도끼창병
02000000 - 궁수
03000000 - 저격수
04000000 - 그리핀
05000000 - 로열 그리핀
06000000 - 검객
07000000 - 십자군
08000000 - 몽크
09000000 - 질럿
0A000000 - 기병
0B000000 - 챔피언
0C000000 - 천사
0D000000 - 대천사

0E000000 - 켄타 우르스
0F000000 - 켄타우루스 대
10000000 - 드워프
11000000 - 전투드워프
12000000 - 우드 꼬마 요정
13000000 - 그랜드 엘프
14000000 - 페가수스
15000000 - 실버 페가수스
16000000 - 수목 가드
17000000 - 수목 군인
18000000 - 유니콘
19000000 - 전쟁 유니콘
1A000000 - 그린 드래곤
1B000000 - 골드 드래곤

1C000000 - 그렘린
1D000000 - 마스터 그렘린
1E000000 - 스톤가고일
1F000000 - 흑요석 가고일
20000000 - 스톤 골렘
21000000 - 철 골렘
22000000 - 마법사
23000000 - 대마법사
24000000 - 지니
25000000 - 마스터 지니
26000000 - 나가
27000000 - 나가 퀸
28000000 - 거인
29000000 - 타이탄

2A000000 - 임프
2B000000 - 패밀리어
2C000000 - 곡
2D000000 - 마곡
2E000000 - 지옥 사냥개
2F000000 - 켈베로스
30000000 - 데몬
31000000 - 팔 데몬
32000000 - 피트 악마
33000000 - 핏 주
34000000 - 이프리트
35000000 - 이프리트 술탄
36000000 - 데빌
37000000 - 아치 데빌

38000000 - 해골
39000000 - 해골전사
3A000000 - 죽은자
3B000000 - 좀비
3C000000 - 와이트
3D000000 - 레이드
3E000000 - 뱀파이어 
3FD00000 - 뱀파이어로드 
40000000 - 리치 
41000000 - 파워 리치 
42000000 - 블랙 나이트 
43000000 - 죽은 나이트
44000000 - 골든 드래곤 
45000000 - 고스트 드래곤 

46000000 - 동굴인 
47000000 - 지옥 동굴인 
48000000 - 하피 
49000000 - 하피 핵
4A000000 - 비홀더
4B000000 - 악마의눈 
4C000000 - 메두사 
4D000000 - 메두사 퀸 
4E000000 - 미노타우르스
4F000000 - 미노타우르스왕 
50000000 - 맨티 코어
51000000 - 스콜피코어
52000000 - 레드 드래곤
53000000 - 블랙 드래곤

54000000 - 고블린
55000000 - 홉 고블린
56000000 - 울프 라이더
57000000 - 울프 레이더
58000000 - 오크
59000000 - 오크 두목
5A000000 - 오거
5B000000 - 오우거 마법사
5C000000 - 로크
5D000000 - 번개새
5E000000 - 사이클롭스
5F000000 - 사이클롭스 왕
60000000 - 베히모스
61000000 - 고대의 큰 짐승

62000000 - 놀
63000000 - 놀 약탈자
64000000 - 도마뱀 궁수
65000000 - 도마뱀 전사
66000000 - 서펜트플라이
67000000 - 드래곤플라이
68000000 - 바실리스크
69000000 - 거대 바실리스크
6A000000 - 고르곤
6B000000 - 마이티 고르곤
6C000000 - 와이번
6D000000 - 와이번 모나크
6E000000 - 히드라
6F000000 - 카오스 히드라

70000000 - 공기 정령
71000000 - 대지 정령
72000000 - 불 정령
73000000 - 물 정령
74000000 - 금 골렘
75000000 - 다이아몬드 골렘

확장팩 정보 (>>>이건 찾으면 슈프림 엔젤 같은것도 다 있음)
76000000 - 픽시
77000000 - 스프라이트
78000000 - 정신의 정령
79000000 - 마법의 정령
85000000 - Crystal Dragons
86000000 - Faerie Dragons
88000000 - Enchanters
89000000 - Sharpshooters


유물 :
00000000 - 마법책 ***
01000000 - 주문 스크롤
 -하지만 마법을 쓰는 법을 모르겠다
02000000 - 성배
03000000 - 투석기 - 쓸모없는
04000000 - 발리스트 - 쓸모없는
05000000 - 탄약 카트 - 쓸모없는
06000000 - 치료사 천막 - 쓸모없는

>>> 무기슬롯 가능 !!!
07000000 - 켄타우로스의 도끼
08000000 - 죽음의 블랙 샤드 기사
09000000 - 놀의 곡갱이
0A000000 - 파괴의 오우거의 클럽
0B000000 - 지옥의 검
0C000000 - 타이탄의 글라디우스

 방패슬롯 가능
0D000000 - 드워프 군주의 방패
0E000000 -하품 자의 방패
0F000000 - 놀 왕의 버클러
10000000 - 난폭 한의 사람 잡아 먹는 귀신의 르그
11000000 - 댐의 쉴드
12000000 - 센티넬의 방패

투구 슬롯 가능
13000000 - 석고 유니콘의 투구
14000000 - 두개골 투구
15000000 - 혼돈의 투구
16000000 - 최고 마법의 면류관
17000000 - 헬스톰 헬멧
18000000 - 천둥 투구

갑옷
19000000 - 석화 나무의 껍질
1A000000 - 갈비 갑옷
1B000000 - 바실리스크 갑옷
1C000000 - 싸이클롭스 왕의 튜닉
1D000000 - 유황 의 흉갑
1E000000 - 타이탄의 흉갑

공방전부 올라감. 세트
1F000000 - 경이의 갑옷
20000000 - 성자의 샌들
21000000 - 행복의 천상 목걸이
22000000 - 용기의 사자의 방패
23000000 - 심판의 검
24000000 - 영원한 깨달음의 투구

세트
25000000 - 용의 조용한 눈
26000000 - 용의 불뿜는 혀 
27000000 - 용의 방패
28000000 - 용의 갑옷
29000000 - 용의 도가니
2A000000 - 용의 날개 
2B000000 - 용의 넥타이
2C000000 - 용의 왕관
2D000000 - 용의 눈

2E000000 - 행운의 클로버
2F000000 - 예언의 카드
30000000 - 무당 벌레
31000000 - 용기의 배지
32000000 - 용맹의 문장
33000000 - 용맹의 그리프

34000000 - Specumum (망원경1)
35000000 - Spyglass  (망원경 2)

36000000 - 장의사의  아뮬렛
37000000 - 뱀파이어 코트
38000000 - 죽은자의  부츠

저항
39000000 - 방해 용품
3A000000 - 카운터 포스의 서 코트
3B000000 - 극성의 장화


3C000000 - 엘프 체리 우드의 활
3D000000 - 유니콘의 갈기의 보우
3E000000 - 천사의 깃털 화살

독눈
3F000000 - 새의 지각
40000000 - 스토아 파수꾼
41000000 - 인식의 상징

외교
42000000 - 정치가의 메달
43000000 - 외교관 반지
44000000 - 대사의 띠

속도
45000000 - 고리의 반지

이동력
46000000 - 승마 장갑

47000000 - 바다 안내 목걸이

48000000 - 천사의 날개
마나회복
49000000 - 마나의 매력
4A000000 - 마나의 부적
4B000000 - 마나의 신비의 보주

4C000000 - 신비의 고리
4D000000 - 신비의 반지
4E000000 - 신비한 신의 고리

4F000000 - 궁창의 궁둥이
50000000 - 신비한 자의 구슬
51000000 - 추위의 불의 자루
52000000 - 비를 몰고가는 구

53000000 - Recanter 's 망토
54000000 - 악령의 모래 시계
55000000 - 악의 모래 시계 시간
56000000 - 불의 마법의 집
57000000 - 바람의 마법의 집
58000000 - 물 마법의 집
59000000 - 지구 마법의 집

5A000000 - 부양의 부츠

5B000000 - 황금 활

5C000000 - 영속의 영역
5D000000 - 취약성의 보주

5E000000 - 생명력의 반지
5F000000 - 생명의 반지
60000000 - 생명의 피를 흘림

61000000 - 신속의 목걸이
62000000 - 속도의 장화
63000000 - 속도의 망토

목걸이
64000000 - 신속의 펜던트
65000000 - 두 번째 시야의 펜던트
66000000 - 거룩함의 펜던트
67000000 - 생명의 펜던트
68000000 - 죽음의 펜던트
69000000 - 자유 의지의 펜던트
6A000000 - 교반 펜던트
6B000000 - 총 리콜 펜던트
6C000000 - 용기의 펜던트

자원
6D000000 - 크리스털 외투
6E000000 - 무한 보석 반지
6F000000 - 수은을 쏟아내는 유리 병
70000000 - 광석의 불가결 한 카트
71000000 - 무한한 유황 반지
72000000 - 목재 카트
73000000 - 금의 끝없는 자루
74000000 - 금의 끝없는 가방
75000000 - 금의 끝없는 지갑

76000000 - 군단의 다리
77,000,000 - 군단의 허리
78,000,000 - 군단의 몸통
79000000 - 군단의 무기
7A000000 - 군단의 헤드

7B000000 - 바다 선장님의 모자
7C000000 - 스펠 바인더의 모자

7D000000 - 전쟁의 족쇄
7E000000 - 금지의 구슬

콤보 인공물 :

7F000000 - 용의 약병
80000000 - 아마겟돈의 칼날
81000000 - 천사 동맹의 검
82000000 - 언데드 왕의 망토
83000000 - 생명의 비약
84000000 - 저주 받은  갑옷
85000000 - 군단의 동상
86000000 - 드래곤의 아버지의 힘
87000000 - 타이탄의 번개
88000000 - 제독의 모자
89000000 - 궁수의 활
8A000000 - 마법의 원천
8A000000 - 부의 도시

댓글러 - save파일도 같은 시스템입니다. 훨씬 쉽습니다.
다만 압축 되어 있으므로 winrar등을 통해 압축을 해제하시오,
그리고 끝난후는 winrar아 아닌 7zip으로 다시 압축한후 확장자를 잘 바꾸면 됩니다.
>>>7zip으로 압축된 파일, 멀티플레이는 아마도 각 빨강부터해서 비밀번호를 입력하는 방식이지 않을까... 


댓글러  -- 긴글
- 세이브게임 내에서 각 영웅이 나열됩니다. 심지어 맵에서 사용할 수 없는 영웅까지 표시됩니다.  총 1094바이트를 사용합니다.

- 만약 캠페인 게임의 세이브게임이라면, 전 맵들의 정보도 함께 딸려옵니다. 세이브 게임은 딸려온 영웅의 정보를 다른 부분에 포함할 것입니다. 그 말은 한 세이브 게임내에 두가지 영웅 설명이 있을 것을 말합니다. 첫번째는 특정 특정맵에서 시작해서 만들어져온 영웅의 정보, 두번째는 이 맵동안에 얻은 정보입니다. 이것은 나중에 당신이 다시 시작할 때 를 위해서 필요합니다.

- 영웅의 이름이 가장 명확하게 보이고, 세이브게임 내에서 가장 쉽게 발견되어, 히어로의 ㅊ이름 첫번째 글자를 오프셋으로 사용합니다. 모든 값은 little endian입니다.

Offsets from    |  Data type
first letter        |
of Hero name|
-195 .. -194    탑레프트를 기준으로(0) x좌표
-193 .. -192    탑 레프트를 기준으로(0) y좌표
-191            Z좌표 (0 =지상 , 1 = 지하)
>>> 음 layer추가가 가능할까??
-190 .. -160    ? Unknown, Hero specifics? Portrait, angle, looks?
-159 .. -151    ?영웅정보로 보임 ; 158 은 클래스 정보
-150 .. -147    x 축 도착지 마커  >> 자기 위치도 2바이트인데 도착지 마커가 왜 4바이트?
-146 .. -143    y축 도착지 마커
-142 .. -139    영웅 레벨 과 관련됨 3바이트는 레벨이나 한개는 모르는듯.
-138 .. -135    최대 이동력
-134 .. -131    남은 이동력
-130 .. -127    경험치
-126 .. -123    히어로 시트에 몇개의 스킬슬롯이 보일 것인가(제한 값으로 보이는데 맞나) 000000 >> 0800000까지 인듯
-122 .. -121    Mana points
-120            영웅 레벨 ( 이게 무슨 소리인가)
-119 .. -57     임시 버퍼 (???)
-56  .. -29     유닛아이디 (note 1)
-28  .. -1      유닛 양 (note 2)
+0   .. +12     영웅 이름 12바이트  >> 더 긴이름 없었나???
+13  .. +40     스킬레벨  (note 3을 보라 )
+41  .. +68     스킬 슬롯 on sheet (쉬트상 몇번째인지 몇번째 스킬인지 의미일듯.)
+69  .. +72     1차스킬 아티팩트 정보 합산
+73  .. +212    마법 (note 5를 보라)
+213 .. +876    들고다니는 아티팩트  (see note 6)

note 1 : 7개의 4바이트 정보 empty는 FF FF FF FF이다. (  -1)
note1 : 그 해당 자리에 총 숫자
note 3: 순서에 따라 정해진 스킬  00 (안배운)부터 03(전문가)까지
note4: note3과 동일한 순서로 최상단부터 1-8 그리고 나머지는 0이며, 01-08 값은 단독이어야 만한다.
note5: 마법은 70바이트의 두 문자열이다. 동일한 순서이며, 00 또는 01을 가진다. 상위 70바이트는 그의 스펠북에 그 마법이 기재되어 있는가를 나타내며, 하위 70바이트는 그 스펠북에 마법이 사용가능한가를 나타낸다. 마법스크롤 마법책, 에 따라 값을 가질 수 있다. (교육술로 아이템이 주는 마법 못쓰는 이유이다. )
note6: 아티팩트는 83개의 8byte문자열이다. 상위 4바이트는 아티팩트ID이다. 하위 4바이트는 스펠스크롤에서만 사용된다. 그렇지 않은 경우는 FF FF FF FF이다. 이 순서는 아티팩트가 보여지는 순서이다. *표는 특수 슬롯이다 >>>웬만하면 건드리지 말라.

+213 .. +216 투구 슬롯 t
+221. +224 망토 슬롯
+229 .. +232 목 슬롯
+237 .. +240 무기 슬롯
+245 .. +248 실드 슬롯
+253 .. +256 장갑 슬롯
+261 .. +264 왼쪽 링 슬롯
+269 .. +272 오른쪽 링 슬롯
+277 .. +280 부츠 슬롯
 +285 .. +288 위쪽 슬롯
+293 .. +296 두 번째 슬롯
+301 .. +304 3면 슬롯
+309 .. +312 하단 슬롯, 우측
+317 .. +320 발리 스터 슬롯 *
+325 .. +328 탄약 장 카트 슬롯 *
+333 .. +336 응급 처치 천막 슬롯 *
+341 .. +344 투석기 슬롯 *
+349 .. +352 마법 책장 슬롯 *
+357 .. +360 하단 슬롯, 왼쪽
+365 .. +368 인벤토리 슬롯 1
+373 .. +376 인벤토리 슬롯 2
+381 .. +384 인벤토리 슬롯 3
+389 .. +392 인벤토리 슬롯 4
+397 .. +400 인벤토리 슬롯 5
+405 .. +408 인벤토리 슬롯 6
+413 .. +416 인벤토리 슬롯 7
+421 .. +424 인벤토리 슬롯 8
+429 .. +432 인벤토리 슬롯 9
+437 .. +440 인벤토리 슬롯 10
+445 .. +448 인벤토리 슬롯 11
+453 .. +456 인벤토리 슬롯 12
+461 .. + 464 인벤토리 슬롯 13
+469 .. +472 인벤토리 슬롯 14
+477 .. +480 인벤토리 슬롯 15
+485 .. +488 인벤토리 슬롯 16
+493 .. +496 인벤토리 슬롯 17
+501 .. +504 인벤토리 슬롯 18
+ 509 .. +512 인벤토리 슬롯 19
+517 .. +520 인벤토리 슬롯 20
+525 .. +528 인벤토리 슬롯 21
+533 .. +536 인벤토리 슬롯 22
+541 .. +544 인벤토리 슬롯 23
+549 .. +552 인벤토리 슬롯 24
+557 .. +560 인벤토리 슬롯 25
+565 .. +568 인벤토리 슬롯 26
+573 .. +576 인벤토리 슬롯 27
+581 .. +584 인벤토리 슬롯 28
+589 .. +592 인벤토리 슬롯 29
+597 .. +600 인벤토리 슬롯 30
+605 .. +608 인벤토리 슬롯 31
+613.. + 616 인벤토리 슬롯 32
+621 .. +624 인벤토리 슬롯 33
+629 .. +632 인벤토리 슬롯 34
+637 .. +640 인벤토리 슬롯 35
+645 .. +648 인벤토리 슬롯 36
+653 .. +656 인벤토리 슬롯 37
+ 661 .. +664 인벤토리 슬롯 38
+669 .. +672 인벤토리 슬롯 39
+677 .. +680 인벤토리 슬롯 40
+685 .. +688 인벤토리 슬롯 41
+693 .. +696 인벤토리 슬롯 42
+701 .. +704 인벤토리 슬롯 43
+709 .. +712 인벤토리 슬롯 44
+717 .. +720 인벤토리 슬롯 45
+725 .. +728 인벤토리 슬롯 46
+733 .. +736 인벤토리 슬롯 47
+741 .. +744 인벤토리 슬롯 48
+749 .. +752 인벤토리 슬롯 49
+757 .. +760 인벤토리 슬롯 50
+765 .. + 768 인벤토리 슬롯 51
+773 .. +776 인벤토리 슬롯 52
+781 .. +784 인벤토리 슬롯 53
+789 .. +792 인벤토리 슬롯 54
+797 .. +800 인벤토리 슬롯 55
+805 .. +808 인벤토리 슬롯 56
+ 813 .. +816 인벤토리 슬롯 57
+821 .. +824 인벤토리 슬롯 58
+829 .. +832 인벤토리 슬롯 59
+837 .. +840 인벤토리 슬롯 60
+845 .. +848 인벤토리 슬롯 61
+853 .. +856 인벤토리 슬롯 62
+861 .. +864 인벤토리 슬롯 63
+869 .. +872 인벤토리 슬롯 64

Spells
Position and which spell
   Spell ID
      Spell name
0  00 Summon Boat
1  01 Scuttle Boat
2  02 Visions
3  03 View Earth
4  04 Disguise
5  05 View Air
6  06 Fly
7  07 Water Walk
8  08 Dimension Door
9  09 Town Portal
10 0A Quick Sand
11 0B Land Mine
12 0C Force Field
13 0D Fire Wall
14 0E Earthquake
15 0F Magic Arrow
16 10 Ice Bolt
17 11 Lightning Bolt
18 12 Implosion
19 13 Chain Lightning
20 14 Frost Ring
21 15 Fireball
22 16 Inferno
23 17 Meteor Shower
24 18 Death Ripple
25 19 Destroy Undead
26 1A Armageddon
27 1B Shield
28 1C Air Shield
29 1D Fire Shield
30 1E Protection from Air
31 1F Protection from Fire
32 20 Protection from Water
33 21 Protection from Earth
34 22 Anti-Magic
35 23 Dispel
36 24 Magic Mirror
37 25 Cure
38 26 Resurrection
39 27 Animate Dead
40 28 Sacrifice
41 29 Bless
42 2A Curse
43 2B Bloodlust
44 2C Precision
45 2D Weakness
46 2E Stone Skin
47 2F Disrupting Ray
48 30 Prayer
49 31 Mirth
50 32 Sorrow
51 33 Fortune
52 34 Misfortune
53 35 Haste
54 36 Slow
55 37 Slayer
56 38 Frenzy
57 39 Titan's Lightning Bolt
58 3A Counterstrike
59 3B Berserk
60 3C Hypnotize
61 3D Forgetfulness
62 3E Blind
63 3F Teleport
64 40 Remove Obstacle
65 41 Clone
66 42 Fire Elemental
67 43 Earth Elemental
68 44 Water Elemental
69 45 Air Elemental


댓글러 -- 긴글
- 당신이 마법길드 정보를 고치기를 원한다면 할수 있다.
타운의 이름을 오프셋 0으로 정할 때 , 마법길드 마법은 다음과 같이 정해진다.

+125 .. +148 Tier 1 Mage Guild spells
+149 .. +172 Tier 2 Mage Guild spells
+173 .. +196 Tier 3 Mage Guild spells
+197 .. +220 Tier 4 Mage Guild spells
+221 .. +228 Tier 5 Mage Guild spells

4바이트씩 6개의 마법을 채워넣을 수 있다. 다만 5레벨은 2개뿐이다.
접근 가능한 마법까지만 채워져 있으며, 어느 타운에서도 접근이 불가능한 마법의 경우는 쓰래기 깞이 채워져 있으며, 00000000또는 다른 값도 포함되기도 한다. 타워의 경우는 다른 값이 채워져있을 수 있지만, 오직 도서관을 통해서만 접근 가능하다.  마법길드를 다 못짓는 3개의 타운의 경우는 불가능 티어의 마법에는 FF FF FF FF 값이 들어 있다.



2019년 3월 19일 화요일

iconv 때문에 망했다. 해결가능하신분이 있다면 답변좀,< 파랜드 택틱스 마법 파싱 프로그램이다. >


마법설명부분은 주석 제거하면 된다. 저 부분은 파택2에만 포함되어 있는 부분이다.

iconv가 아주 지랄같다. 

bash에서 head -c 20 |iconv -f euc-kr -t  하면 아주 잘 된다. 

그런데 glib에 있는 iconv를 불러서 사용하면 이 지랄이 난다. 

뭔가 16bit나 32bit computer문제에 little, big-endian 문제가 섞인거 같기는 한데...

어디에서 생긴 문제인지를 모르겠다. 


뭐 어쩌겠는가... 안 되면 어쩔 수 없는거지... 



ps:헥스에디터로 자기 속성에 맞는 브레스 마법을 모든 캐릭에게 얹어주니 게임이 아주 
빨리 진행되고 재미 있다. 


/*!
* \file a.c * \brief * * <+DETAILED+> * * \author KIM Hyeok (kh), ekh0324@gmail.com * * \internal * Created: 2019년 03월 18일 * Revision: none * Compiler: gcc * Organization: Konkuk University * Copyright: Copyright (c) 2019, KIM Hyeok * * This source code is released for free distribution under the terms of the * GNU General Public License as published by the Free Software Foundation. */ #include #include #include #include #include #include extern int errno; int main() { /* iconv_t ic = iconv_open("UTF-8", "CP949"); */ /* iconv_t ic = iconv_open("CP949", "UTF-8"); */ // iconv_t ic = iconv_open("UTF8//IGNORE", "CP949"); iconv_t ic = iconv_open("UTF-8", "CP949"); // iconv_t ic = iconv_open("UTF-8//TRANSLIT//IGNORE", "CP949//TRANSLIT//IGNORE"); // iconv_t ic2 = iconv_open("utf-8", "cp949"); if (ic == (iconv_t)(-1)) { perror("iconv_open"); return 1; } char buf[1000]; FILE * input = fopen("magic1.dat", "r"); char* strings = malloc(1000); short level, mana, firewater, windearth, lightdark; short min, max; char* filename= malloc(25); short sound, targettype, magictype,charactertype; char* description = malloc(21); char* outbuf= malloc(1000); char* inbuf = malloc(100); size_t insize,outsize; size_t result; // fread(inbuf, 1, 108, input); while(!feof(input)) { memset(inbuf, 0x00,100); insize = 20; outsize = 400; memset(inbuf, 0x00,insize); memset(strings, 0x00,1000); memset(outbuf, 0x00,1000); fread( inbuf, 1,insize, input); insize = strlen(inbuf); result = iconv(ic, &inbuf, &insize,& outbuf, &outsize); if (result < 0) { int err = errno; strerror_r(errno, buf, sizeof(buf) ); printf("result : %ld, errno : %d(%s)\n", result, errno,buf); return(-1); } else { fprintf(stderr, "[%s][(%ld)\n",outbuf, outsize); } memcpy(strings,outbuf, 300 ); memset(strings+300, 0x00, 10);; fread( &level, 2,1, input); fread( &mana, 2,1, input); fread( &firewater, 2,1, input); fread( &windearth, 2,1, input); fread( &lightdark, 2,1, input); fread( &min, 2,1, input); fread( &max, 2,1, input); insize = 12; fread( filename, 1,insize, input); filename[24] = '\0'; fread( &sound, 2,1, input); fread( &targettype, 2,1, input); fread( &magictype, 2,1, input); fread( &charactertype, 2,1, input); outsize = insize = 12; /* fread( inbuf, 1,insize, input); * iconv(ic, &inbuf, &insize, &description, &outsize); * description[20] = '\0'; */ printf("name:%s\n", strings); printf("배우는 레벨은 %d\n", level); printf("사용하는 마나는 %d\n", mana); if ( firewater>0 ) { printf("불마법 (+%d)\n", firewater); }else if (firewater <0 -firewater="" d="" if="" n="" printf="" windearth="">0 ) { printf("대기마법 (+%d)\n", windearth); }else if (windearth <0 -windearth="" d="" if="" lightdark="" n="" printf="">0 ) { printf("빛마법 (+%d)\n", lightdark); }else if (lightdark <0 -lightdark="" :="" d="" description="" filename="" max="" min="" n="" printf="" puts="" s="" span="">

가장 많이 본 글