이 블로그 검색

2022년 12월 2일 금요일

Libreoffice Calc에서 Libreoffice base로 또는 SQL로 데이터 넣는 방법.

복사해서 붙여넣기로 하면서 에러가 나는 경우가 몇번 있었어서, Sql query 만들어서 하는 방법을 택하였다. SQL query를 만들 때 가장 문제는 문자형의 경우는 "" 로 싸거나, ''로 싸거나 하는 경우가 많다는거다, 그래서 필요한 함수를 먼더 만들어야한다.
도구 >> 매크로 >> edit 매크로
다음과 같은 Basic 함수를 만들어주자.
function dquoted(Optional x)
  Dim iRow As Integer
  Dim iCol As Integer
  DIM resultString As String 
  resultString = ""
 
  If NOT IsMissing(x) Then
    If NOT IsArray(x) Then
resultString =  Chr(34) & x &Chr(34)
Else
      For iRow = LBound(x, 1) To UBound(x, 1)
        For iCol = LBound(x, 2) To UBound(x, 2)
          resultString = resultString &", "  & Chr(34) & x(iRow,iCol) &Chr(34)
        Next
      Next
    End If
  End If
  dquoted = resultString
end function
여러칼럼의 문자 칼럼이 있다면, 쓸 수 있도록 해주었다. 그 다음 부터야 간단하다. 앞 셀에는 insert into tablename ( 를 넣고, 다음 칼럼이 숫자면 그냥 =해당 데이터로 그대로 복사해준다. 문자열로 이루어진 칼럼은 위 함수를 사용해서 =dquoted( 해당 문자열 또는 문자열 어레이) 를 해준다. 이런 식의 반복 후 마지막 데이터 칼럼 뒤에 ); 을 넣어준다. 그 다음에 =concat( insert into 셀부터 ); 까지 선택 그 다음쿼리를 다 선택후 끌어내려서 채우기를 한 후, concat 셀을 모두 선택한 후, base에 가서 sql 명령어 넣기를 하면 자료가 들어간다.

2022년 10월 26일 수요일

kile+fcitx 끝글자 버그 수정법. (kile 코드들 고치는 방식을 시도함)

https://cogniti-works.blogspot.com/2018/09/blog-post_4.html

위 블로그 포스팅을 보고 힌트를 얻어서 하기로 한다. 



한글입력기 끝글자 관련해서 검색해보면, ibus는 문제가 많아서 fcitx로 간다느니 뭐 그런글들이 많다. 하지만 중요한건 내가 fcitx를 쓰고 있는데도 이런문제가 생겼다는거다. 

많은 입력기들은 cjk외에는 ime입력기 같은거 없어도, compose키나 alt_gr키 같은거 이용하면, 되서그런지 중국,일본, 한국 말고는 관심이 없는 듯 하다.  

그러다 보니, 끝글자 버그 이슈는 20년이 넘는 아주 오래된 이슈, 한국인 기준으로는 버그이지만, x-window qt gtk 개발자도 기반 어플리케이션 개발자들도 무관심한 버그이다. 뭐 자기들은 영어나 영어기반 언어 쓴다 이거다. 


여기저기 보면, 코드 고쳐서 입에다 떠먹여줘도 그거 버그 아니라서 이슈 닫는다는 반응을 겪었다는 사람들이 보인다. 

뭐 어쩌겠는가, 목마른 사람이 우물을 파야지. 끝글자 버그는 초성중성종성을 조합해서 글자가 나가기 전에 ime가 조립을 하면서도 화면에는 보여줘야하고 다른 글자를 누르면 수정도 해야하는 복잡한 한글 같은 언어에서만 나타난다. 뭐 로만자(??)를 사용하는 일본, 중국애들도 겪을 것 같은데도 2022년 오늘 내게도 똑같이 일어나는거 보면 , 한글만의 문제인건가 싶기도 하다. 


뭐 이제 더 이야기할 것은 없고, 저 블로그에서, qt, gtk, X11 어떤 gui프레임웍을 쓰는지에 따라 검색해야할 키워드를 주었기에, 반신반의 하고, 검색을 해서 답을 얻었다. 


kde는 qt위에다가 올린 것이니, 

grep -i qinput -R . 이라는 

검색으로 찾았다. eventfilter.cpp라는 파일에 해당하는 부분이 있다. 

kile은 위젯이 워낙많기에 modal dialog가 아닌 widget도 아주 많이 화면상에 비친다. 그렇지만 우리의 텍스트 입력은 당연히 text input 위젯에 바로바로 적용이 되어야 한다. 그러다보니 중앙에서 키보드 event를 감시한다. 

kile은 또 그리스어 특수문자 입력 때문인지, ime event도 감시한다. unicode text가 나올 때, tex format으로 할지 unicode문자를 그대로 보여줄지 뭐 이런걸 하려고 하는거 같은데, qimeevent라는거에... 잠시 속아서 헛짓을 좀 했다. 

다시 돌아와서, 마우스 더블클릭 이벤트 위에서 마우스 press 이벤트를 가져오자. 


 11 +#include <QInputMethod>

 19 +static void  reset_im()  
20 +{

21 +  QInputMethod* ime =   QGuiApplication::inputMethod();
22 +  ime->reset();
23 +}

 31 +    else if(e->type() == QEvent::MouseButtonPress) {
32 +      reset_im();
33 +    }

 34      else if(e->type() == QEvent::MouseButtonDblClick) {
]

QInputMethod 를 Include한다. 
reset_im함수를 static하게 만든다. (네임스페이스 오염방지)
mouse press 이벤트를 받으면 reset_im 함수를 호출한다. 
원래의 마우스 입력 이벤트가 그대로 사용되어야 하므로 return을 하지 않는다. 
(결국은 맨 뒤로가서 return false가 되어 해당 qwidget에 이벤트가 전달)


빌드해서 설치한다. 

결과적으로 끝글자 버그는 사라졌다. 

kate에 이버그가 있언는지 기억이 안나는데 그거 확인하고 고쳐야겠다. 

chrome에는 이 버그가 없는데, 대신, 강제로 조합을 중간에 깨뜨리는 미친 짓거리가 일어난다. 
요거 아무래도, 이벌식 사용자 기준으로 끝글자 버그 해결하려고... 뭐 하다가 이렇게 된거 같은데, 
요건 고칠 엄두가 안나므로, 주소표시줄에서 글자를 만들어서 복붙을 하고 있다. 
아무래도, chrome 에서 EDITOR를 불러서 강제로 텍스트 편집기를 띄우는 플러그인을 찾아봐야겠다. 어차피 짜증나는거, vim이나 emacs라도 올려서 써봐야지.

2022년 10월 25일 화요일

X-Modmap 사용기 - 중분내용물 1. shift-insert -> dead_greek

 


한동안 alt. intl. 영문 키보드를 쓰다가 한글 설정이랑 충돌이 일어나서, 

그냥 basic us 키보드로 돌아온 상태... 그리고 원래 dead_greek은 지원하지 않았음. 

뭐 수정은 쉽게 하지만, 아예 level3를 사용하지 않는 키보드에다가 저런거 설정하기 빡세서,


compose key setup에서 dead_greek 조합은 있으므로 dead_greek만 만들면 되서 

구글링을 하니, StackExchage에서 Shift+Insert로 사용하고 싶다는 사람이 있어서 대충 보고 따라함. 


먼저 

$ xmodmap -pke|grep -i 118

keycode 118 = Insert dead_greek Insert dead_greek


로 입력해서 상태를 보면, 보통은 Insert No_Symbol Insert 이렇게 보면, 근데 나는 이렇게 셋팅되었음

하는 방법은 간단함


$ xmodmap -e "keycode 118 = Insert dead_greek"


이제 완성되었음. 이제 당신은 아주 쉽게 alpha등을 입력 할 수 있음

αβ shift+insert, a   shift+insert, b 로 쉽게 입력 가능함. 

근데 이게 맥에서 붙여넣기 명령이라... 몇군데서 충돌이 있는 것을 방금 발견함. 키를 바꿔야 겠음

$ xmodmap -e "keycode 42 = g G g G dead_greek dead_greek "


3번째 부터는, lock키와 관련되어 있는거 같고, 일단 5개를 입력했을 경우는 적용이 안되므로 다음처럼 하기를 바람.

음. 이건또 적용이 안되네... 보류다. shift insert로는 잘되니 뭐. 


2022년 10월 19일 수요일

생각을 넓히자. X-Touch mini Hack. Story.

서문

  예전에, USB Snooping, MIDI Snooping 등을 알게 되어서, Windows에서만 버튼 셋업을 바꿀 수 있는 X-Touch Mini의 설정 프로토콜을 확인해 보려 하였다. 뭐랄까 뻔하다고 생각했다. USB 드라이버를 따로 구성해서 할 것 같지는 않았고, USB MIDI 드라이버 상에서 sysex로으로 구현했을거라 생각했다. 

  그리고서는 바로 snooping을 시도했으나, 
 
Beringer X-Touch Editor v1.21은 미디 연결을 독점적으로 연결하도록 강제되어, snooping 툴에서는 입출력 내용을 볼 수가 없어서 이것 저것을 시도해보다 안되었다. 

뭐 대신, Mackie Control 모드가 어떤 식으로 Endless knob의 신호를 보내고 받을 수 있는지에 대해서 알게 되는 순에서 마무리가 되었다. X-touch는 마키모드가 아니더라도 이런식의 신호를 주고 받을 수 있도록, 노브설정을 할 수 있다. (3가지의 모드가 있음. )

아 그렇다. 계획은 실패였다. 


변화

정말 사고 싶어서 장비를 샀지만, 내가 전문 음악하는 사람도 아니고, gimp에 사용하려고 해도 gimp의 미디입력 플러그인이 너무 허접해서 사용이 어려울 뿐아니라, 내 프로그래밍 실력이 허접하다보니 모딩도 시도하다가 시간이 부족해 못한 관계로, 장비가 혼자 구석에서 놀고 있었다. 

그래도, 시간이 날 때마다 새로운 드라이버가 올라왔을까봐, 홈페이지를 찾아가 구경해보고(이제는 그만해야함 너무 오랜시간 동안 업데이트가 없음)

누군가는(중덕, 양덕 !!) 은 해낼거라 믿고, github에서 X-touch mini를 한번씩 검색해 보는데 이번에 누군가가 해냈음을 발견 했다.   

perl 사용법. (

 perl -lane    "/^Time/ and print $F[2] 


l은 맨 끝이 개행으로 끝나게 해서 실행 이후도 터미널이 깔끔하게 하는것.

a는 자동으로 chopt를 수행해 라인 검색하면 자동으로 $F[0..n]으로 담김. awk의 대안 사용



 cat text   |perl -ne 's/Time/Melong/g'  

text의 Time 을 Melong으로 변환 줄의 끝까지 여러번 수행 (g)

perl -i.bak -ne 's/Time/Melong/g' file           sed -i 와 같은 방식 내용을 바꿈.


full line strings --> $_

current loop number -->>>> $.


이것 들을 이용하여, 출력도 가능.


startline=1

endline=2


'while(<>) {

    /^Time/ and startline=$.

    /^Loop/ and endline=$.

}    

seek(<STDIN>, 0,0);

while( $.>startline and $.<endline) {

print $_;

};

'

2022년 10월 13일 목요일

sca.coffee 25.13 - 새로운 브루잉 차트를 향하여를 보고.

https://sca.coffee/sca-news/25/issue-13/towards-a-new-brewing-chart

원본은 위 주소로가서 보세요.


인터넷에 검색하면, 핸드드립에 물을 얼마나 써야하나요라고 검색하면, 

다음과 같은 차트를 많이 만납니다. 영국기준이 어떻고, 미국기준이 어떻고 하고 말이죠.


 사실 저 중간에 선안에서  조절하는 방법이 궁금해서 찾아본건데 아무래도 안나옵니다. 뭘 의미하는지가 궁금했는데 아쉽습니다. 

얼마나 볶았는지 어떤 크기로 분쇄했는지 얼마나 천천히 했는지 이런것과 관련된 것일까요 저는 잘모르겠네요. 당연히 안다고 생각하는건지 그것이 무엇인지 설명하는 사이트가 안나오네요. 일단은 추출시간과 관련있다고 생각하기로 했습니다. 뭐 시간이 무한대로 가면 저렇게 선형이지는 않겠죠. 천천히 우리면 당연히 더 많은 성분들이 녹을 것이고 종류에 따라 녹아드는 시간이 다르다보니 다른 변화율을 가질 것이니까요.

저 차트가 나타내는 것은 다음과 같습니다. 적절한 물1L당 커피의 비율이 어떻게 될 때, 사람들이 선호하는 커피가될 것인가에 대한 이야기입니다. 일단 저 중간을 관통하는 선은 55g으로 18:1 정도를 말합니다. 

그러나, 핸드드립을 하고나면, 커피가 머금는 물의 양이 두배의 무게 정도로 생각을 하기 때문에, 18:1이지만, 16:1이 본인이 섭취하는 양과 관련이 있습니다. 160ml(물은 160g이니까) 의 커피를 먹으려면, 커피를 10g 정도를 사용해서 하라는거죠. 

저 X축은 수율이라고 표현하는데, 커피 고형분중 유용(?)성분비를 말하는듯 합니다. 18~22%

정도를 선호하는걸로 나와있습니다. y축은 물속에 얼마만큼 들어갔는지를 나타냅니다. 저 concentration은 용액의 농도와는 달리, 분산액속(화합물이 아닌 혼합물..설탕물,흙탕물 중학교 과학책에 나옴)  부유물의 비율을 말하는데, 폴리머 피직스에서 쓰는 그 값이 맞는지는 잘 모르겠네요. 고형분의 비율은 1.15-1.35정도를 선호한다고 합니다. 

제가 제대로 이해했다면, 추출이후에 커피에 물을 섞는 행위는 y축 값만 변화시키는 행동일까요. 근데 당연히 물타면, 커피도 연해지지만 덜 쓰기도 할텐데 이해가 참으로 어렵네요.

2022년 9월 28일 수요일

경찰 검찰들이 또 열심히 피의사실 공표중이네... 기자들이 뻗치기로 얻은 자료같아보이지 않는게 많이 나오네.

 

경찰, '마약 투약 혐의' 남태현·서민재 소변·모발 국과수 의뢰

2022년 9월 21일 수요일

리버 데미지업 전후 비교.

일단 위 그림(다운로드한 위치 블로그 있음) 을 보시면 알 수 있겠지만, 반지름에 따라 일정하게
스플래시 범위가 나누어 진다.  여기서 알 수 있는건, 25% 범위 ,50%범위에 들어오는 유닛들이 굉장히 많다는 것이다. 그러면 이제 생각을 해보자.


먼저 리버의 공격력을 알아보자.

리버의 공격력은 100 일반형이다. 그리고 로보틱스 서포트베이에서 업그레이드를 통해 +25를 
해줄 수 있다. 

그러면, 다음 표로 한방에 죽는 유닛들을 살펴보자. 
한방리스트누적표
2531.255062.5100125
X브루들링(방+1)브루들링SCV(방2업)SCV다크템플러(쉴+방=4)
저글링메딕(방1업)히드라
드론파벳디파일러
프로브메딕
라바벌쳐
저글링하이템플러
마린
고스트

음. scv 방2업 메딕 방1업 까지는, 원래 한방이 아니었는데 한방이 된다.  
드론이나 프로브는 팍팍 잡히는데, SCV는 그렇지 않았는데, 그건 당연히 체력이 많아서이다. 

한방기준으로는 조금 아쉽다. 이제 두방 기준으로 보자.

어차피 쉴드업 3까지 안해서... 몇개는 의미 없음. 그래서 나중에는 대충 씀.
두방리스트
누적표(저그는 당연히... 100% 아니건 버로우 X를 기준으로 함)
25+2531.25+31.2525+5031.25+62.550+5062.5+62.525+10050+100125+31.25125+62.5
브루들링라바SCV히드라하이템플러다크(+2)다크(+2)골리앗골리앗드라군
저글링프로브메딕벌쳐러커러커리버
드론고스트디파일러다크탱크(+2)질럿
프로브SCV(+1)하이템플러탱크
라바(+2)메딕(0)
마린파벳
고스트(+2)

뭐 파란색은 ... 풀업 또는 해당 업일 때... 쉴드가 1이라도 회복되면 다른 경우인데, 어차피 인게임에서는 겪을 일이 없다.   바이오닉상대로는 특별할게 없다.  

SCV 잡는 용도를 생각할 때는, 25%범위 두방이나, 50%범위 한방이 매우 중요하다고 할 수 있다.   유리한 상황에서는 하던대로, 셔틀 속업 먼저 해서, 그냥 하면 되고,
40:60 상황에서는 선리버 업이나, 셔틀이 적기지에 떨어질 시간 맞춰서 좀 늦게 더블 서포트 베이를 시도해 볼 필요가 있다. 무난하게, 지는 상황이기에 변화가 필요함. 

공업리버는, 탱크나 골리앗 잡다가, 옆에 스치는 애들 잡기도 좋고, 노업은 100%만 죽으니까 scv를 점사하다가, 불발이 나지만, 공업리버는 건물 지정한 후 스플로 scv를 잡을 수 있음.

셔틀리버로 중간중간 시즈 주저앉히는 싸움이 요즘 메타라, 벌쳐 25%+50%로 잡히는것도 큰 차이, 어차피 중앙에서 몰려다니기 때문에  25%+50%이나 25%+25%+25%로 잡을 기회는 충분히 많음. 


저그 상대로는... 주도권이 저쪽에 있고 스커지 때문에, 셔틀속업이 우선이고, 자원 여유는 없음. 그돈이면, 역뮤탈 대비용으로 마엘스톰 준비할 수 있어서 여유가 좀 없지만, 일단 해놓으면 쏠쏠함.
벌쳐보다 히드라만날일이 더 많아서 원래는 안죽는 상황에서 죽는건 차이가 큼.

25%+50%, 25%X3으로 살아남는 애들은, 러커 될 수 있는 애들이고,  
딸피라서 한방만 더 때리면 된다고 말하기 쉽지만, 러커에 스톰쓰면서  한방만 더 때리면 되는 상황을 많이 겪었을 것이라 생각함. 그 상황에서 말처럼 쉽지 않다는 걸 토스유저들은 배웠을 거라 생각함.  

그리고 의외로 디파일러는 전장에서 돌아다니기 때문에 스플래시는 잘 맞지만, 정타로 맞을 일은 별로 없음. 그래서 럭키로 디파일러를 잡는 상황이 생각보다 많이 연출되서 좋음.

토스잡는 이야기는 밥먹으러 가야해서 여기서 마침.

결론.  1. SCV 잘잡으려면, 리버공업이 필요함. 
         2. 히드라, 벌쳐 스플래시로 더 많이 죽일 수 있음.
         3. 탱크, 골리앗, 벌쳐 진출 견제 시, 효과 좋음.
         4. 질럿,리버,드라군 잡는게 다름. 
         5. 의도하지 않았지만 럭키로 하템, 디파일러 잡히는 경우가 있음. 그냥 감사하셈.  



2022년 9월 6일 화요일

kdenlive 22.08 소식. 드디어 비디오 매트파일을 지원한다고 하네요...

기능을 제공하지 않을 때는 트랙 4개 만들어서, 하나는 비디오 매트에 곱하고, 하나는 비디오매트 반전에서 곱해서 합쳐야 하는게 그냥... 간단하게 컴포지션 효과에서 파일 로딩하는걸로 해결이 납니다. 그 밖에 자막 예쁘게 다는 기능들추가 되었고, (타이틀 사용하는건... 좀 복잡했고, 자막다는거 추가된것도 이전 버전은 좀 별로였음.) lotti 애니메이션, Gaxnimate 벡터 그래픽 애니메이션 프로그램과의 통합이 추가되었다는데, Intro나 Outro에서 깔끔한 효과를 사용하는데 쓰지 않을까 생각합니다. 자주 쓰는 그래픽을 컴퓨터 성능에따라 4k,8k 계속 가져가는데는 애니메이션이 최고죠. 근데, 아예 모르는 물건이라 사용해봐야 할 것 같고요. Youtube, peertube vimeo 마커를 달 수 있는 기능이 추가 되었습니다. 0:00 Intro 1:14 best 뭐 이런식으로 하는걸 미리 해서 description에 집어넣으면 알아서 입력되는 기능이지 않을까 잘모르겠군요. 오디오 녹음 인터페이스 UX를 좀 만졌다고 합니다. 트랙자리에 바로 녹음되는 모습을 관찰할 수 있게 되어서, 영상에 코맨트를 달거나 하는데 있어서 매우 유용해졌다고 할 수 있겠습니다. 사용자 인터페이스가 개선되었으며, AppImage 등을 사용할 때 Icon이 누락되거나 색상이 이상해지는 부분들이 수정되었다고 합니다. 이거 좋네요. Ubuntu 버전업을 안하면, 주버전 업이 안되서 AppImage를 쓰고 싶은데도 저런 문제 때문에 포기했거든요. Nice합니다.

2022년 9월 2일 금요일

질병기록실) 코로나19 - 격리일 2022-08-24~~30.

23일 아침부터, 뭔가 목이 잠김, 오후들어서 몸살 조짐이 보임. 퇴근~~!! 집에 갔더니, 몸살이 올라옴, 9시경 집에서 코로나 테스터기를 사용함. 10분만에 아주 진하게 두줄이 나옴. 항원항체 반응이 격렬하게 일어났으므로, 항원이 몸에 겁나 많다고 할 수 있음. 24일 오전 동네 의원에 전화로 방문해서 확인하면된다고해 방문, 11시 10분경, 똑같은 테스트를 의사(!!)에게 받음. 20분 기다리라고 했으나, 10분만에 확진판정을 받음. 약을 받았음. 증상1. 목잠김. 이건, 완치가 되고서도 남아있음 (22.9.2 현재도 있음) 증상2. 몸살, 오한 흔한 감기 증상이라고 할 수 있음. 저녁시간 대에 유난히 심함. 증상3. 열. 24일 25일 26일 저녁 때마다 열 문제를 겪음. 증상4. 불면증, 의사말로는 아파서 그렇다는데, 약먹고는 많이 좋아졌으니 원인이 다른듯., 23일부터 26일 아침 7시까지 각성(커피를 과다마신 상태와 비슷함.) 상태로 있어서 잠을 잘 수 없음. 23일 커피를 오후에 마셔서 그런거라면, 뭔가 코로나 바이러스가, 카페인 민감증이나, 카페인 대사장애 같은 것을 일으킬 수도 있다는 가정을 해봄. 증상5. 슬슬 잠을 잘 수 있게 되니, 저녁에 있던 오한이나 몸살도 조금 가라 앉음. 대신 목에 가래가 끓기 시작함. 가래를 신체의 항원항체 반응이라고 생각하면, 이제 끝물이라고 생각할 수 있음. 증상6. 기침. 그냥 기침은 아니고, 가래가 끓었을 때, 가래를 배출하려는 신체반응으로 생각할 수 있음. 4일차부터 하루 3회 정도, 6일차에 들어서는 하루 1회정도로 변화함. 증상7. 밥맛이 사라지지는 않는데, 몸이 아파서 그리고 야외활동을 안하므로, 밥을 적게 먹었음. 탈수 증상도 없었으나, 몸무게가 2kg 정도 빠진걸로 확인.!! 첨부 예전에 신종플루를 유행후 3년되 즈음해서 걸렸는데, 그 때는 미각 장애를 겪었음. 미각 장애의 형태는, 기름 맛 과다측정이었음. 진라면 매운맛 컵라면을 먹는데, 너무 니글니글해서 먹을 수가 없었음. 그 때랑 비교해볼 때, 나 개인에게는 코로나로 미각장애는 없었다고 판단됨.

2022년 4월 18일 월요일

랑그릿사2 리버싱 - PC판 마법적용 방식(디버프 확률 관련 작동)

걸릴 확률이 존재하지 않는 버프, 디버프 마법은 제외하고 확률로 걸리는 

마법들을 설명합니다. 


존, 참, 슬립, 뮤트 등이 있습니다. 참의 경우에는 제 설명에 오류가 있을 가능성이 매우 큽니다. 

코드가 굉장히 복잡하기 때문입니다. 어떤진영인지 원래 어떤 진영인지 이런 정보들이 마구잡이로

들어있기 때문에 매우 복잡합니다. 


첫번째 포스트에서도 사용했던, 0x40ffd3 Apply_Spell_To_Target이라 명명한, 함수에서

switch(마법타입) case문을 통해서 관찰하였습니다. 


case Mute:

먼저 올바른 타겟 포스인지 체크합니다. 이 체크가, 진영을 보여주는건지 뭘 리턴하는건지 모르겠네요. 
일단 0을 리턴해야지만 마법이 걸립니다. 

그리고 Army Number가 0또는 7이어야 합니다. 강제로 1-6으로 용병 설정시 뮤트를 걸 수 없습니다. 

해당 유닛의 ArmyFlag의 MuteFlag 0x10이 0인지 체크합니다. 

마법 실행 플레그가 1이면 , 가장 먼저 마법이 성공할지를 계산하는 함수를 호출합니다. 
해당 함수는 0x0040f54d에 위치했습니다. 

이 함수는 먼저 마법방어력이 100인지 체크한 후 100이면, 마법 실패를 리턴합니다. 
다음 rng값을 구합니다. 

다음 100  -   ((공격자_LV - 방어자_LV) << 2) ) 를 수행합니다. 
음수 처리가 어떻게 될지는 잘 모르겠지만, 다시 쓰면

MDF - (공격자 - 방어자) X 4 의 값을 얻습니다. 편의상,  레벨차 보정 마방치라고 부르겠습니다. 

rng값에  %101을 취해 0-100의 난수를 얻습니다. 

난수 < 레벨차_보정 마방치 이면,     마법실패를 리턴하고, 아닌 경우 마법 성공 로직을 돌립니다. 

동일 레벨일 때, 마방치가 100이 아닌 99일 때,    0-98은 실패, 99와 100은 성공이므로,
확률은     1/100이 아닌   2/101입니다. 일단 마법 면역만 아니면 잘 걸립니다. 
잘 모르는 상태로 기대했던 것보다, 2배가량 높게 걸립니다. 

표로 보여드리면 다음과 같습니다. 

실패확률
공격자 방어자 레벨차
마방-8-4048
200.5150.3560.1980.0400.000
400.7130.5540.3960.2380.079
600.9110.7520.5940.4360.277
801.0000.9500.7920.6340.475
991.0001.0000.9800.8220.663
성공확률
공격자 방어자 레벨차
마방-8-4048
200.4850.6440.8020.9601.000
400.2870.4460.6040.7620.921
600.0890.2480.4060.5640.723
800.0000.0500.2080.3660.525
990.0000.0000.0200.1780.337
계산이 틀려보이신다면, 소수점 3번째 까지 나와서 그렇습니다. 99/101계산기로 해보시기를.

실패확률 부분을 보시면, 마방이 높을 수록 실패확률이 높고, 공격자의 레벨이 올라갈수록(오른쪽)
실패확률이 내려가는 것을 볼 수 있습니다. 

성공확률은 그 반대입니다. 

마방이 20이어도, 레벨만 높으면 50%는 저항을 합니다. 
마방이 99여도, 레벨이 낮으면 1/3은 마법이 걸립니다. 

case zone:

타겟이 맞는지를 체크한 후, 존플레그를 확인해서 안걸려 있으면 , 거는 로직으로 갑니다. 

실행 플레그가 없으면, 레벨마방보정치를 어딘가에 저장하고, 타겟수와 효과수에 1을 더합니다. 

실행플레그가 있으면, 마법이 성공하면, Zone_flag를 1로 해줍니다.  0x08


마법이 실패하면 다른 함수를 호출합니다. (왜????)
여기서 요상한 짓을 하는데, 마법 때마다, 어떤 메모리 공간에 올라와 있는 메모리 값을 
다른데다가 이동을 (시키고 위치x *48 +4, 위치y *48 -4) 값을 저장합니다. 


case sleep:

슬립도 시작은 타겟이 적합한지 먼저 체크를 하고, army타입이 불사가 아닌지를 체크합니다. 
불사는 슬립에 면역이도록 하드코딩 되어 있습니다. 종족값을 바꿀 때는 이걸 고려해야합니다.

실행플레그가 없을 때는, 존과 동일합니다. 

실행플레그가 있으면 성공일 때는 슬립 플레그를 1로 합니다. 슬립 플레그를 쓰는 비트필트는 , 
부대원별로 따로 존재합니다. 

슬립은 성공시에도, 다른 메모리 공간에 접근해서 위치를 저장합니다. 
 

case charm:

마지막으로 참입니다. 
참마법은 sleep과 동일합니다. 타겟체크, 불사체크 실행플레그 없을 때 동일입니다. 

참은 참이 걸려있던지 안걸려있던지를 확인을 안합니다. 

마법이 성공할지 체크를 먼저 합니다. 

실패시 실패 벡터공간에 데이터를 저장합니다. (다 동일 함수 사용)

성공시에 어떤 byte값이(b1) 0인지 체크합니다. 0이면, 
다른 바이트 값(b2)를 b1에 씁니다.      if(b1==0)   b1 = b2;

이어서 조건 없이 b2에   마법사용자의 b2값을 씁니다. 

추측을 해봅시다. b1은 원래진영번호, 0이면 변화없음이지 않을까. 

b2는 현재 진영번호라고 생각해보자. 

이어서 b1과 b2모두 1이 아닐 때,    b2 = 3을 쓴다. 

b1==b2면     b1 = 0 이다.  

그 다음 어떤 함수를 작동시키는데, 모든 타일에 있는 유닛들에 대해서, 뭔가를 건드린다. 
ArmyFlag 0x40이 참과 관련이 있는 것 같은데 아직 정보가 부족하며, 
적으로 바뀌면, 적들이 사용하는, force 정보공간으로 주소가 이전이 되는지, 

첫번째 hex값과 두번째 hex 값으로 force 넘버를 변조한다. 
근데 계산 과정에서 앞에서 바꾼 camp 번호값이 안 쓰인다. (??)

왜 재 계산을 하는건지 알 수 없다. 



참에 대해 조금더 들여다 보자(자가치유코드 다시보기)

루프를 돕니다. 먼저 원래의 캠프 값을 가져옵니다. 그 값이 0이면, 현재 캠프 값을 
다시 가져옵니다. 

얻어온 캠프값을  가지고 비트앤드 연산을 취한 뒤,  0이 아니어야 합니다. 

캠프값에 대한 정보가 아직 필요하지만, 현재 턴이오는 캠프가 아니면 자동회복 되지 않습니다.
어차피 한바퀴돌면, 자기턴이 올거라 무슨의미가 있을지는 알 수 없습니다. 

처음에 20개의 포스에 대해서, 루프를 돕니다. 
이 20개가 전체 전투가능한 지휘관 숫자면, 우리에게 참이걸린 적도 작동을 할테지만, 아니라면, 이상해 집니다. 

참이 걸려 우리편이 된 친구들은, 우리턴 시작에 자가회복이 된다고 일단 합시다. 

이 친구들은 인접위치의 부대원에게 체력 회복을 하고 가장 먼저, 참을 해제 합니다. 

확률 계산을 한 후, 원래캠프 번호가 0이 아니며, 참마법( ??) 플레그가 0(??)이면서,
 아미 플레그가 0x20이 없어야 합니다.  그리고 지휘관의 마법 방어력의 확률로 

마법을 해제합니다. 

마법해제 코드는 

   current_camp = initial_camp;   
  initial_camp = 0; 
입니다. 캠프 번호 두개가 참마법의 플레그로 보입니다. 

부대원 플레그 0x20, 포스 플레그 0x20은 미궁으로 빠집니다. 이름을 다시 지어야 겠습니다.
일단은 둘다 Absolute_Camp(enum값)로 이름을 바꾸고  사용처를 확인해야겠습니다. 






가장 많이 본 글