이 블로그 검색

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="">

2019년 3월 4일 월요일

USB 4 스펙이 공표되었다. (탐즈발)

USB 표준을 제정하는 USB Promoter Group은 2019년 중반에 USB 4 아키텍처로 옮겨갈 것이라 공표했다. 

새로운 빠른 인터페이스는 Thunderbolt3가 지원하며, USB 3.2 대역폭의 두배인 무려, 40Gbps 대역폭을 지원한다. 


대충 발번역하기로, USB 표준 제정에 공헌하는 인텔이 Thunderbolt3 표준을 USB 4로 넣기로 결정한 것으로 보인다. (내말)

인텔은 로열티를 받지 않기로 하였기 때문에, 많은 칩제조사들이 비용을 지불하지 않아도 될 것이다. (진작에 그러지, 2017년에 이미 로열티는 포기한듯.
물론 USB3 표준에 들어가는것에 대한 로열티를 포기한 것은 아니니 조금의 의미는 있음... )

USB4는 인증 된 USB Type-C 케이블을 사용하고 2레인 인터페이스에서 최대 40Gbps의 처리량을 보인다고 한다. 





이미 Type-C 케이블로 다 처리하고 있는 상황이고,  슬롯 옆에 이미지로 구분하고 있는 상황인데다가 썬더볼트처럼, 파워도 전송하고 있는 상황이니, 그냥 앗싸리, 넣는걸로 결정한듯함. 소비자들이 점점 혼동할 테니 의미있는 변화인듯 하다. 그런데 pci express 신호는 포함이 아닐 것 같은데 표준이 완전히 제정되고 나서 확인해보면 될것 같다. 

저 2레인의 인터페이스라는건, Type-A로도 20Gbps의 성능이 나올 것으로 보인다. 일단 현재 있는 프로토콜로는 이 정도 속도가 안나올 것으로 보이는데, pci express 위키문서를 봐도, 128b/130 인코딩 보다 더 큰 넘은 안보인다.  

그냥 클럭을 두배로 올리는 것 같은데... 여유가 있을지는 모르겠고, 
1.5m 이하에서만 사용되는 근거리 인터페이스가 될 것 같다.  

저렇게 발표해놓고, 그냥 4-lane을 쓰거나 할 수 도 있을 것 같은데, 핀수가 많으니까, 

음??? 


USB 3.2를 준수하는 물건도 안나오는 판에... 너무 빨리 진행되고 있는 것은 아닌가 싶기도 하다.  10Gbps x 2 도 표준 나오기 전에 만들은 물건들은 본것 같은데... 

음 어떻게 되려나... 

2019년 1월 9일 수요일

운전병 전역 후 10년만에 알게 된 사실 충격과 공포...

우연히 군면허를 사회면허로 바꾸는 것에 대한 관심이 생겨...

정확한 정보를 찾아보았다.



우리부대는 K-511 병력수송 차량을 모는 친구들이 전체 운전병의 반 이상이었는데...

아무도 군 운전 경력으로 사회 대형면허를 따는 혜택을 못보았다.



우리 수송부에서는 K-511은 중형이라 당연히 아니었고, K-711을 모는 친구들도 K-713덤프만 대형으로 바꿀 수 있다고 하였는데(우리부대에는 없음.)

이게 다 사실이 아니었다.  물론 똥차를 모는 친구와 유조차를 모는 친구들은 다 사회 대형면허를 받아 갔다. 트레일러를 모는 친구들도 이 혜택을 받았다.


수송부에서 잘못 알려줄 만 한 이유는 이와 관련된 공식문서는 아래아 한글 문서 2페이지로 되어 있는데, 1페이지만 읽었을 경우는 이러한 답이 나온다.

그런데 2페이지에는 차종별로 자세히 나와 있고, K-511과 K-711의 경우는 옆에 별표로 예외 사항에 대해서 자세히 나와 있다.



K-511, K-711은 군운전경력확인서에 병력수송 경력이 명시되어 있어야 하며,  그 경력이 3000km이상인 자에 한한다고 되어 있다.

뭐 일단, 병력수송으로 전차대대에서 3000km 나오기는 굉장히 어렵다. 사오톤 운전병들이야 3000km 4박5일 포상을 두번도 받는 친구들도 있다지만, 대부분이 물자수송이라 어려울 것이다.

그래도 2중대 중형차 몰던 후임(나보다 2살인가 많았던)은 수송부 소대장이 참으로 좋아해서 상병 달 즈음에 3000km 포상을 받았으니, 알았으면 전역전에 병력수송으로 대형면허를 얻을 자격을 얻지 않았을까 생각한다.
(이 친구는 근데 사회 견인차 면허를 얻어갔을거라서 뭐... )



내가 운전을 좀만 잘했어도, 두돈반도 몰았을텐데...
나는 신임을 전혀 받지 못했으므로, 뭐 기회조차 없다.



30대 아저씨들 갑자기 군대 생각에 검색하다가 여기 들어왔으면, 어차피 자동차 보험할인 때문에 군운전경력확인서 때시니까 그 때 확인을 좀 해보시길 바랍니다.  여러분들의 운전면허증이 갑자기 대형면허증이 될 수가 있다구요ㅗ.


 전역 후 1년만 가능하다는데???

2019년 1월 2일 수요일

히어로즈커뮤니티번역: Rules for (Creature) Spells and Orbs


Evil_Warrior가 유닛의 면역과 저항에 대해 (좋은)리스트를 만들었다.  링크는 다음과 같다. (지만 그냥 여기다 넣어서 기술한다. ) 
틀린 부분은 괄호로 수정한다. 

Resistance VS Immunity

얼마전에도 다른 쓰레드를 포스트 했다. (하지만 올리지 않을것) 그랬지만, 하나의 새로운 토픽을 또 던지도록 하겠다. 참여하라.

때때로 우리는 몇몇 유닛들에게 몇몇 마법이 작용하지 않는 모습을 본다. 그것은 두가지의 가능성이 있다. 첫째는 유닛이 특정 마법에 면역되어 있는 것이며, 두번째는 유닛이 마법을 저항하는 것이다.  때때로, Angelito에 따르면 H3의 도움말과 메뉴얼은 저항과 면역에 대해서 틀린 정보를 준다. 

예를 들면,
1.  메뉴얼은 블랙드래곤이 모든 마법에 면역이라고 말한다. 이것은 틀렸다. 이것은 블랙드래곤이 모든 마법에 저항한다고 쓰여야 한다.
2. 같은 이유로, 타이탄은 정신마법에 면역이지 않으며, 정신마법에 저항한다. 
3. 동굴인은 눈멀기 마법에 면역이라고 나와 있다. 이것은 사실이다. 



그렇다면 어떤 것이 면역이고 어떤 것이 저항인지 설명해보자.

H3에는 총 3가지의 크리처 타입이 있다.  Living, Unlining, 그리고 Undead이다. 

Living Creature

모두 공통적으로 사기를 가지고 있으며, 마법, 아티팩트, 그리고 영웅의 사기의 의해서 변경가능하다. 

모든, Living creature는 언데드파괴 마법과, 시체살리기 마법에 면역된다. 

드워프와 배틀드워프는 각각 20%, 40%의 확률로 적의 마법에 저항할 기회를 가진다.  ((내가 쓴 마법이 마법반사에 의해 반사된 상황일 때는, 확인이 필요))

유니콘과 워 유니콘은 인접한 셀의 우리편에게 적의 마법에 저항할 기회를 준다. (20%)

블랙드래곤은 모든마법에 저항한다.(Lv0 마법은 확인해야함) 
골드드래곤은 1-4Lv마법에 저항한다. 
그린드래곤, 레드드래곤, 에이져드래곤은 Lv1-3마법에 저항한다. 

자이언트와 타이탄은 모든 정신마법에 저항한다. 
정신마법은 망각, 눈멀기, 최면, 버서크, 환희, 슬픔, 격노를 말한다. 

불새, 피닉스, 이프리트(술탄)은 모든 불 마법에 저항한다. 

동굴인은 눈멀기 마법에 면역이다. 


Unliving Creature


가고일을 제외하고는 사기가 중립이다. 이들은 부활할 수 없다. 
이들은 모두 언데드파괴, 시체살리기, 부활, 희생 마법에 면역이다.  

정령류와 골렘은 환희 슬픔 마법에 면역이며, 나머지 정신마법에 저항한다. 

정령류 각각은 새로 쓴다. 

크리스탈 드래곤은 드워프 처럼 20%의 확률로 적의 마법에 저항한다. 

Undead Creature

언데드 크리처는 정신마법에 따라 저항과 면역으로 나뉘는데,
눈멀기, 환희 슬픔에는 면역이며, 망각, 버서크, 격노, 최면에 저항한다. 
이들은 부활, 희생, 데스리플, 축복, 저주에 면역이다. 


저항아티팩트 
저항할 기회를 주는 아티팩트 세종류가 있다. 5,10,15%
용기의 뱃지는 버그로, 모든 정신마법에 저항이나, 등급이 버그인지, 기능이 버그인지 모르겠다. 

면역 아티팩트
각종 팬던트는 그 마법에 면역이다. 아마겟돈 블레이드도 면역이다. 드래곤 조상의 힘은 모든 1-4Lv마법에 면역한다. 


취약점의 구슬 아티팩트는 모든 마법저항을 무시한다. 단 유니콘의 능력은 무시하지 못한다. 

Rules for (Creature) Spells and Orbs

Magic Resistance
마법저항()은 특별한 저항이다. x% 마법저항이라는 뜻은 타겟이 되었을 때 x%의 마법을 저항을 가진다라는 의미이다. 이것은 캐스트된 마법과 작용된 마법을 포함한다. 
  만약 마법저항력이 100%를 넘어갈 경우, 마법의 대상이 될 수 없다. 

Artifacts and places that affect spellcasting

취약점의 구슬은 모든 저항을 무효화 한다. Hota 외의 버전에서는 적의 저항만 무효화 하지만, HoTA는 모두 무시한다. 
  유닛의 공격에 따른 데미지 변화는 영향을 주지 못한다. (정신의 정령에게 타이탄이 공격받을 때 50%만 입는 상태로 그대로 )

억제의 구슬은 모든 캐스팅을 막을 수 있다. 생물의 능력은 이런 의미에서 캐스트로 간주되지 않고 적용된다. 
  대천사의 부활, 악마소환, 정령의 원소보호 주문, 페어리 드래곤의 마법시전, 지니의 마법 등이 캐스트된 마법이다.   
  크리처의 공격으로 부터 비롯되는 것은 'cast'로 분류되지 않는다.  드래곤 플라이의 약화 등이 포함된다. 

Recanter`s Cloak(나그네의 망토로 알고 있는데 구글 번역기가 모르는데) 이것은 다르게 작용한다. 3,4,5 마법을 예방한다. 이것은 Lv3-5에 해당하는 유닛의 어빌리티도 막는다. 스콜피코어의 마비가 Lv4에 해당한다. 

저주 받은 땅은 나그네의 망토처럼 작용하지만 두가지 예외사항이 있다. 
이것은 Lv2도 막는다. 
유닛은 Lv1 마법도 'cast'할 수 없다. 피의 굶주림, 불마법 저항, 물마법 저항이 이에 해당 한다. 

기한이 없는 즉발되는 능력은 이에 포함 되지 않는다. 뱀파이어로드의 'Drain' 파워리치의 'Death Cloud' 에이저 드래곤의 'Fear' 강곤의 'Death Stare' 등이 이에 해당한다. (천둥새는 cast 인가 보다. 이게 범주가 이상하다. )


Creature Resistances/Immunities
동굴인은 눈멀기, 유니콘의 눈멀기, 메두사, 바실리스크의 석화에 면역이다. 그리스 로마 신화를 보면 눈이 있어야 하기는 하다. 

언데드는 눈멀기, 축복, 저주, 공포, 생물에 작용하는 마법에 면역이고, 나머지 정신마법에 저항한다. (유니콘의 눈멀기는 통하나 보다. 테스트 해보자)

골렘은 공포에 면역이고 생물에 작용하는 마법에 면역이며, 언데드에만 작용하는 마법도 면역일 거다.  나머지 정신마법에 저항ㅎ나다. 
  피해마법과, 이프리트술탄의 불방패에 대해 피해감소가 골렘에 따라 작용한다. 

가고일은 희한하게도 골렘에 사기가 있는 형태다.

정령은 골렘처럼 면역이고, 정신마법과 눈멀기에 저항한다. 

공기폭풍의 정령은 미티어 샤워에 저항하며, 라이트닝볼트 체인라이트닝, 아마게돈 마법에 두배에 데미지를 받는다. 

물얼음 정령은 아이스볼트 프로스트 링에 저항하며, 불마법에 두배의 데미지를 입는다. (불방패는 아니라는 것 같던데)

불에너지 정령은 이프리트 술탄의 불방패 피해에 면역이며, 불마법과 마법의 화살 마법에 면역이다. 물마법 피해를 두배 받는다. 

땅마그마 정령은 라이트닝 볼트 체인라이트닝 아마게돈 마법에 저항하며, 미티어 샤워 마법에 두배의 데미지를 받는다. 

마법의 정령은 0-5Lv 마법에 저항한다. 

불새, 피닉스, 이프리트(술탄)은 이프리트 술탄의 불방패 피해에 면역이며, 불마법에 저항한다. 

자이언트 타이탄은 정신마법과 눈멀기 마법에 저항한다. 

그린 골드, 레드, 블랙, 하늘색(에이저) 드래곤은 Lv0마법에 대해서도 100% 저항한다. 유닛의 마법을 포함한다. 

크리스탈 드래곤은 20% 마법의 저항이 있다. 

하늘색 드래곤은 공포에 면역이다. 



Notable Spells and Creature Spells

안티매직은 마법이 사용될 때, 작용된 모든 나쁜 마법효과를 제거하며, 좋은 효과는 남는다. 안티매직은 'cast' 마법에 저항한다. 독특한 예외로 드래곤 플라이의 Weakness가 있다. 이 마법이 다른 유닛을 때릴 때, 전체마법으로(마법의 땅) 걸릴 경우 저항한다. 

드래곤 플라이의 약화는 중급의 약화 마법처럼 작용한다. 마법의 땅에서는 고급 수준으로 작용한다, 그러나  이것은 맞은 적에 한해서 먼저 작용한다.(맞은 적이 저항하면, 전체마법이 안 써짐.)  맞은 적이 다음과 같을 때는 작용하지 않는다.  
1. 유닛이 죽을때, 
2. 마법에 저항할 때, 
3. 이미 약화에 걸릴때, (심지어 초급이나 보통 level이어도 그렇다. 약화마법을 쓰지 말자)
4. 약화에 저항이나 면역일 때, 
5.  배틀드워프(등)가 마법의 땅에서 공격을 받는다면, 먼저 자신의 마법저항으로 저항할 기회를 가지고, 저항에 실패할 시, 고급 약화가 걸리고 다시 이 마법에 저항할 기회를 가진다.  배틀드워프 혼자 한해서 저항할 확률은 40%+60%*40%= 64%... 

드래곤 플라이의 디스펠은 Lv0이고 모든 공격에 자동으로 '작용'한다. 어떤 크리처도 이것에 면역이지 못한다. 그리고 저항할 수도 없다. (드워프 등) 마법의 땅에서도 전체마법으로 작용하지 않는다.  (골드드래곤에게 마법반사를 걸고 때려봐야 알 듯, 뭔가 여기저기서 모순이 발견된다.)

와이번 모나크의 중독은 Living creature에만 작용하며, 0Lv이며 3라운드 동안 작용한다. 즉시 최대 HP가 10% 감소하며 다음 전투턴마다 10%씩 추가 감소하여 30%까지 감소한 후, 만료된 후에도 효과가 제거되지 않는다.  최대 50%까지 감소할 수 있다.  가장 위에 있는 유닛을 포함하여 HP가 감소하며, 이것으로 유닛을 죽일 수는 없다.  이것은 치료로만 제거 가능하다. 치료로 제거될 때, 가장 위의 유닛은 해당하는 HP만큼 회복한다. 
예)에이저 드래곤이 와이번모나크에게 3의 데미지를 입고 중독에 걸린다면, 1000-3=997이 되고 즉시  897/900이 되고, 3round 작용하면, 697/700이 되고, 치료마법을 맞으면, 300+5*마력 만큼 회복되면서 1000/1000이 된다.
  4색 드래곤에게 안 걸린다. 테스트 해봤다. 
  
고스트 드래곤의 노화는 Living creature에만 작용한다. Lv5에 해당하며, 3round 동안 작용하고 만료되고 사라진다.  효과는 즉시 최대 체력이 50%가 되며, 중독과 같은 방식으로 작용한다. 체력이 없을 때, 노화에 걸린다면 3턴간 도망다니면 다시 체력이 501로  회복될 수 있다. 노화는 먼저 공격에 대한 데미지 계산을 완료한 후 추가로 최대체력의 50% 만큼 데미지를 주지만 유닛의 숫자를 줄일 수 없다. 에이져 드래곤을 죽이고 노화가 걸리면 500의 데미지를 줄 수 있지만, 체력이 적은 에이져 드래곤을 때려도 안죽었다면... 데미지는 거의 줄 수 없다. 7렙 유닛간의 싸움이 아닌 이상 이것은 무시해도 되지만 유닛이 죽었더라도 딱히 잘 걸리지가 않아서 의미가 없다.
   드워프, 배틀드워프+영웅저항력으로(SOD)에서 테스트한 결과, 노화도 저항력을 포함해서 확률을 계산한다.(infinitekh)


노화와 중독의 차이점은 여러가지가 있다. 노화는 블랙에게만 걸리지 않는다. 중독은 4색에게 모두 걸리지 않는다.노화는 선 효과이며, 중독은 후 효과라고 게임 메시지 창에나오나 실험해보니 그렇지 않다. 노화는 해제와 치료로 해제할 수 있다. 중독은 치료로만 해제할 수 있다.노화는 3턴이 지나면 다시 자동으로 회복된다. 중독은 3턴이 지나도 그대로 효과가 남아 있다.  


메두사 바실리스크 석화의 시선은 동굴인을 제외한 후 모두에게 영향을 줄 수 있다. 석화된 유닛은 절반의 데미지를 입고 최대의 힘으로 보복한다. (여기다가 눈멀기 마법이 걸릴 경우는 확인 필요)

이프리트 술탄의 불방패, 기본레벨의 불방패 주문과 같다. 화재 면역 생물에 영향을 주지 않는다. 골렘의 피해감소도 제대로 작용한다. 불마법 방어 마법이 정상 작동한다. 얼음과 물정령은 추가피해를 받지 않는다.  
  불방패가 추가로 걸릴 경우 하나만 작용한다. 
화재방패의 피해는 기본피해*(1+피해보상의 십집수 합계)이며, 즉 피해감소가 없었을 때를 기준으로 하며, 모든 유닛이 죽을 때에는 죽기위해 필요한 피해량을 가지고 계산한다.  근접페널티가 있는 적을 공격한 후 반격을 받고 죽지 않는다면,  반격데미지가 50이어도 불방패 데미지는 20이며, 고급 방패를 건 상태로 공격을 한다면 반격데미지가 35이고 불방패 데미지가 20일 수 있다. 여기에 타자르의 방어술이 있다고 생각하면 매우 짜증날 수 있다.  

스콜피코어의 마비는 모든 생물에게 영향을 줄 수 있는 Lv4의 마법이다. 3전투턴동안 작용하고, 마비된 병력은 완전히 데미지를 입고 50%의 힘으로 보복을 한다. 여기다가 이프리트술탄이 공격을 해도 윗 항목처럼 적용된다. 석화보다 효과가 좋다. 

좀비의 질병은 치료와 디스펠로 제거할 수 있는 2Lv마법이며 3라운드 동안 작용한다. 

유니콘의 눈멀기는 초급 눈멀기 마법이며, 마법의 땅에서는 고급수준으로 작용한다. 

유니콘의 오라는 인접 유닛들에게 20%의 마법저항을 준다. 이것은 다른 마법저항에 더해지는 양이 아닌 따로 체크되는 양이다. 심지어 오라들 끼리도 독립적으로 시행된다. 

정령의 속성마법 방어 마법은 6전투턴간 작용하며 각 정령은 3번의 기회를 가진다. 중급으로 cast하며 마법의 땅에서는 고급수준으로 작용한다. 이 방법만이 자신이 자기자신에게 보호마법을 걸 수 있는 유일한 방법이다. 

공포의 기사의 저주는 드래곤 플라이의 약화처럼 작용할 것이라 추정한다. 

썬더버드의 번개는 모르겠다. 

마스터지니는 골드드래곤에게 마법반사만 건다. (저항이 없을 때)

오우거메이지는 6전투턴간 작용하는 피의 굶주림 마법을 세번 쓸 수 있고, 중급수준으로 작용하며, 마법의 땅에서는 전문가 수준으로 작용한다. 

핏로드의 데몬소환은 죽은 living creature의 시체에만 사용가능한, Lv2의 마법이다. Pit Loards의 수에 50을 곱한 수만큼의 HP를 가진 데몬을 소환 할 수 있다. 데몬은 최대체력으로만 생성될 수 있으므로 최대체력이 아니면 내림 연산한다.  


뭐 열심히 썼는데 새로운게 없다. 

2018년 11월 27일 화요일

HOMM3)축복마법과 저주마법에 의한 데미지 기대값 변화

고급 저주마법이 반올림인지 올림인지 내림인지를 몰라서 그냥 내림으로 계산했다. 확인해보고 아닐 수 도 있다. 정말 재미 있는 부분은 저주와 축복이 서로 상쇄 관계에 있다는 것이다. 
  축복마법의 효율이 매우 뛰어나다. LV1-3은 고급축복에 대해서 다 1.5를 넘는다. '슬레이어' 마법이 매우 한정적인 상황에서 공격력을 8을 올려줌으로 인해 최대 1.4의 변화율을 보일 수 있게 된다.  블러드러스트나 정확마법도 최대 1.3까지의 변화율을 가지므로, 공격적으로 사용할 때는 블레스만한 마법이 없다.  
  저주마법의 변화율을 보라. 쉴드마법의 변화율이 잘나가야 0.7이고, 에어쉴드마법은 그나마 0.5이지만, 저주마법만 걸리면 천사를 제외하고는 전부 쉴드보다 강력하다. 사실 지혜 없이 슬로우를 안배운 상황에서는, 불마법도 상대적으로 쓸만하다. 
  
블레스 마법의 효율이 매우 좋다.  물정령도 블레스가 걸린다. 다만 마법의 정령은 걸리지 않는다. 
  저주 마법의 효율이 매우 좋다. 다만 불정령은 이프리트 만들면서 코드를 공유했는지 공격마법을 뺀 나머지 마법도 안 걸린다.  걸리는 친구 기준으로는 고급쉴드보다 좋다. 다만 쉴드에 면역인 유닛은 별로 없어서...

공기의 정령은 고급 축복, 고급 저주를 서로 상쇄 했을 때 효율이 최고이다. 
저주에 걸려있는 상태에서 축복을 걸면 9배 강력해진다. 그 반대도 생각할 수 있다. 
축복은 초반 확장하는데 있어서 있으면 좋은 마법이다. 하지만 없을 확률이 높다. 

저주마법의 효율을 보라.  끝내준다. 왠만하면 방패보다 좋다. 블랙드래곤의 경우는 쉴드가 안걸리니, 드래곤을 아낀다면 저주마법이다. 
순서가 이상하다는 것을 지금에야 알았다. 업그레이드 까지 포함해서 하위 3유닛과 그다음 3유닛이 똑같은 데미지라 그래프가 재미있다. 인퍼노의 희망(?)  고르곤과 와이번 이 두 유닛은 축복의 효율이 그리 좋지 못하다. 어차피 와이번은 성벽에서 쏘는 화살 맞아 죽고 고르곤은 머리수로 싸우니 다른 유닛에게 좋은 마법이니 좋은 마법이다. 
  저주마법에 굉장히 허약하다. 저주마법으로 상대하기도 좋고, 쉴드로 내 방어력을 올리는 방식은 파리들이 날아다니면서 툭툭치는 상황에서는 좋지 못하므로, 둘다 고급이면 포트리스 상대로는 저주를 사용하자. 하지만 보통은 슬로우를 건다.


축복효율이 그리 좋지 못한 종족이다. 개는 빌드오더상 밀려 있고, 
임프는 체약체의 비싸고, 그리고 어차피 마법길드에서 안나온다. 
고레벨 유닛들에게 효율이 고만고만하다. 다만 공격력 상승마법의 최강자는 여전히 축복이다. 
  저주 마법이 최고의 공격력 감소 디퍼프마법이지만, 유난히 똥개에게는 강력한 마법이다. 고급 저주가 있다면 똥개는 바보가 된다. 

안 걸리지만 일괄적으로 해봤다. 걸리기만하면 참 쓸만한 마법이지만, 언데드가 축복을 받는다는것은 좀 이상하다. 
  그냥 상대방에게 저주나 걸자 저주나올 확률이 54%라고 한다. 
고레벨 유닛의 축복 효율이 떨어진다. 초반확장에 있어서 매우 쓸만한 마법이다. 초급으로 엘프에게 1.25 고급으로 1.5이다. 고급 기준으로 2발이 세발되는 것이다. 
   일단 저주마법에 걸린다면, 쉴드보다 효율이 좋은 편이다. 그랜드 엘프 기준으로는 공기방패마법보다 좋다. 초급이어도, 그랜드엘프를 저주하도록 하자. 
비슷한 형상이다. 오크랑 고블린이 축복의 혜택을 많이 받는데, 별론 좋은 구성은 아니다. 울프라이더도, 1.43까지 나오므로, 쓸만하다. 초급은 1.14로, 굉장히 효율이 떨어지는 편.

저주마법의 효율은 고급유닛에게는 대략 0.6 언저리, 초급유닛들은 고블린 빼고 0.3 언저리다. 슬로우걸고 하나씩 때려잡다가 하나남은 오우거 무시하고 정리하다 후회하지말고 걸 수 있으면 걸자. 

축복효율이 극히 떨어지는 편이다. 초반확장시에도 초급축복이 그램린에게 효율이 1.33밖에 안된다. (1.33이면 다른 마법으로는 범접할 수 없이 큰 수이긴하지만 ) 나가는 고급기준으로 1.05, 1.03 상승이다. 그래도 3궁수에게 2.0, 1.25, 1.22라는 좋은 비율의 기대값 상승이 있으니 걸 수 있으면 걸자, 
  저주마법이 공기방패마법보다 못하다. 메이지만 같은 효율이다. 나가말고는 옆에 보호유닛들에게는 그래도 쓸만한 효율이다. 나가에게도 0.75,0.77은 되므로 대전투시에는 쓸만한 마법이다. 3궁수 체제에서 근거리 원거리로 이 정도만 되어도 어디인가.



이전 글에 히어로즈의 전투에서 한스택의 데미지 계산방식을 올렸다. 10기까지는 각각 한개체에 대해서 모두 따로 균일한 분포로 최저에서 최대 데미지뽑기를 한다고 하였다. 그렇기에 가운데가 볼록해져, 데미지의 기대값이 중요하다. 기대값을 기준으로 축복마법의 효율과 저주마법의 효율을 살펴보았고, 축복마법의 강력함과 저주마법의 강력함을 보았다. 

  특별히 방어력 상승용 마법의 대안으로 저주를 자주 살펴보았는데, 왠만한 상황에서는 저주가 좋은 대안이 되는 것을 알 수 있다. 

2018년 11월 16일 금요일

Vim 정규표현식 패턴 이해하기.

패턴. (help pattern 하면 나오는 부분에 대한 해설을 할거다. )


2. The definition of a pattern 패턴의 정의.
초짜는 help usr_27.txt를 찾아보시라 :help usr_27.txt라고 하면 됨.



1. 패턴은 가지의 or 연산 결과를 합한다.
  (한국말로 여러가지패턴을 찾을 수 있다.
  사실 패턴간 연산 순서를 말하는건데 concat이니 branch니 이래서 어려움)

pattern ::= branchA \| branchB \|branchC

A를 만족하거나 B를 만족하거나 C를 만족하거나.

예 이철수 \| 김철수 \| 박철수
라고 하면 이철수 또는 김철수 또는 박철수를 말한다.

2. 접붙이기 (And연산) 이다.  (concat이 식물학에서 뭘 의미하는건가?)
이 번에는 순서가 중요하다.
  branch ::=       concat
               or  concat \& concat
               or  concat \& concat \& concat

foobeep\&...   -> 을 해석하면 foobeep이라는 글자에서 foo 글자를 말한다 .
.*Peter\&.*Bob 는 Peter와 Bob을 모두 포함하는 Line 을 가리킨다.

첫번째 검색은 줄 전체를 검색해서 모든 문자열에서 Peter로 끝나는 문자열을 가리킨다. vim help 문서내에서 테스트 해볼 수 있다.

그 다음, 그 문자열을  다시 두번째 concat으로 검색을 한다. 그러면 라인처음에서 Peter 사이에 Bob로 끝나는 문자열을 내뱉는다.

   sjdklfjaslkj Peter klsjdlkfjs Bob kjdsklfjskdljfkl Peter    -- Matched
   lkjdslfkjsdlkjflk Peter lksdjflkjs Bob sdjflksjdlf klsdjflksj -- Not matched

상당히 요상하다.  Peter와 Bob가 모두 포함된 라인은 다음처럼 검색하면 된다.   .*Peter.*\&.*Bob.*
 Peter가 포함된 줄의 Bob만 찾는 다면 .*Peter.*\&Bob이다.

이 패턴이 찾기에 사용될 때는 커서의 위치가 패턴의 시작으로 가므로 중요할 수 있고,  찾아바꾸기에 사용될 때는 패턴의 끝도 중요해진다.

3. concat은 여러 조각으로 이루어진다.
 이미 쓰고 있었다. foo는 f다음에 o가 오고 또 o가 오는 문자열을 말한다.
  f[0-9]b 이 것은 f다음에 0-9중 하나가 오고 b가 오는 문자열 패턴이다.

4. 조각은 한개의 atom 또는 atom의 시퀀스를 말한다.


 piece   ::=      atom
               or  atom  multi
 예)   a*    "" a aa aaa aaa aaaa 등등

5. atom은 한 문자 또는 패턴이다. (??)
  여기서 부터 재귀라는 것을 알 수 있다. 패턴을 정의하는데 패턴을 알아야하니까 사실 그냥 다 패턴이고, 패턴간 연산순서로 기억하자.  그냥 국어적 의미도 필요없고 각자가 생각하는 패턴이 왠만하면 잘 맞으니까 무시하자. 

그냥 글자를 ordinary-atom이라고 부른다고 한다. 뭐 유니코드 같은건 수바이트가 한개의 atom이니까 ascii문자를 의미하는건 아니니까 오해하지 말자.

\(pattern\) 괄호로 묶으면, 온전한 한개의 패턴이 atom이 된다.
v\(abc\)*z 는  vz -> vabcz -> vabcabcz 뭐 이런 것이 되겠지.

저 atom 과 multi를 정의하는거는 쉽게 공부할 수 있다.



3. Magic

  문자열 내에 문자가 문자그대로가 특수한 역할을 맡을 때가 있다 그것을 Magic이라고 한다.  문자열을 최대한 자연스럽게 표현할 것이냐, 아니면 패턴을 최대한 쉽게 타이핑할 것이냐를 어떻게 설정할 것인지 vim에서는 조절할 수 있다.

after:    \v       \m       \M       \V         matches                'magic' 'nomagic'          $        $        $        \$         matches end-of-line          .        .        \.       \.         matches any character
         *        *        \*       \*         any number of the previous atom
         ~        ~        \~       \~         latest substitute string
         ()       \(\)     \(\)     \(\)       grouping into an atom
         |        \|       \|       \|         separating alternatives
         \a       \a       \a       \a         alphabetic character          \\       \\       \\       \\         literal backslash          \.       \.       .        .          literal dot          \{       {        {        {          literal '{'          a        a        a        a          literal 'a'
설정을 해도 딱히 몇개 바뀌지는 않는다. magic을 어떻게 하는지가 패턴을 많이 쓰는 vim하고 perl이 좀 달라서 혼동스러운데, 그럴때는 그냥 명시적으로 해결해라. perl에도 magic 설정이 가능한지는 모르겠다.



          multi     'magic' 'nomagic'  matches of the preceding atom /star   *       \*      0 or more       as many as possible
/\+     \+      \+      1 or more       as many as possible (*)
/\=     \=      \=      0 or 1          as many as possible (*)
/\?     \?      \?      0 or 1          as many as possible (*)
정규표현식은 cmd 창에서 쓰는 ?*하고는 다르다. 그러나 훨씬 다양한 패턴이 가능하므로 숙지하자. 여기가 가장 기본이다. \+도 사실 잘 안쓰인다. 그냥 글자를 한번더 찍어서 표현하자 . a\+ -> aa* 어차피 타이핑수도 동일하다.
/\{     \{n,m}  \{n,m}  n to m          as many as possible (*)        \{n}    \{n}    n               exactly (*)
       \{n,}   \{n,}   at least n      as many as possible (*)        \{,m}   \{,m}   0 to m          as many as possible (*)        \{}     \{}     0 or more       as many as possible (same as *) (*)
  기억하기 어렵지않다. 요거는 보통 dvc10003.jpg 같이 이미지 파일의 자리수와 관련된 일을 할 때 많이 쓴다.
/\{-    \{-n,m} \{-n,m} n to m          as few as possible (*)        \{-n}   \{-n}   n               exactly (*)
       \{-n,}  \{-n,}  at least n      as few as possible (*)        \{-,m}  \{-,m}  0 to m          as few as possible (*)        \{-}    \{-}    0 or more       as few as possible (*)
   요거 중요하다. 그리고 유용하다. 위에 있는 친구들은 전부다 as many as possible이라서 
 아까 있던 Peter.*Bob이라는 글자 지우려다가 한줄 전체를 날리는 경우가 허다하다. 그럴 때는 u를 누르고 요거를 쓰면 된다. 
  정규표현식 지원해주는 프로그램중에 as few as possible 안되는 친구들도 있다. 구리다. 
                                                       E59

/\@>    \@>     \@>     1, like matching a whole pattern (*)
/\@=    \@=     \@=     nothing, requires a match /zero-width (*)
/\@!    \@!     \@!     nothing, requires NO match /zero-width (*)
/\@<=   \@<=    \@<=    nothing, requires a match behind /zero-width (*)
/\@<!   \@<!    \@<!    nothing, requires NO match behind /zero-width (*)
 이거 좀 재미있다.  \@>는 아직 잘 모르지만, 
\(a*\)ab를 검색하면, 저 그룹에 b앞에 a가 포함되도록 하는것인데, 패턴의 중복을 막는 방법이고, 일상적으로 볼 일이 없다. 

이 zero width는 검색은 하되 패턴에는 포함이 되지 않는 것을 말하는데, 찾아바꾸기나, syntax highlighting에 중요하다. 난 김철수를 박철수를 바꾸고 싶다. 뭐 이런 상황에 사용된다. 찾아바꾸기야 통째로 김철수를 찾아 박철수로 바꾸면 되지만 김씨인 철수만 글자를 밝게 처리한다거나는 어려우니 이런기능이 필요하다. 

이 친구들은 위치가 중요한게 아니라 저거 앞에 있는 atom을 수식해주는 것이라 위치를 잘 파악하자.  김철수에 김을 수식할 때는, 김\(철수\)\@= 로 써야해서 좀 해깔릴 수 있으나 그냥 * 같은거라고 생각해야한다.

      ordinary atom      magic   nomagic   matches /^      ^       ^       start-of-line (at start of pattern) /zero-width /\^     \^      \^      literal '^'
/\_^    \_^     \_^     start-of-line (used anywhere) /zero-width /$      $       $       end-of-line (at end of pattern) /zero-width /\$     \$      \$      literal '$'
/\_$    \_$     \_$     end-of-line (used anywhere) /zero-width /.      .       \.      any single character (not an end-of-line)
/\_.    \_.     \_.     any single character or end-of-line
/\<     \<      \<      beginning of a word /zero-width /\>     \>      \>      end of a word /zero-width /\zs    \zs     \zs     anything, sets start of match
/\ze    \ze     \ze     anything, sets end of match
/\%^    \%^     \%^     beginning of file /zero-width           E71 /\%$    \%$     \%$     end of file /zero-width /\%V    \%V     \%V     inside Visual area /zero-width /\%#    \%#     \%#     cursor position /zero-width /\%'m   \%'m    \%'m    mark m position /zero-width /\%l    \%23l   \%23l   in line 23 /zero-width /\%c    \%23c   \%23c   in column 23 /zero-width /\%v    \%23v   \%23v   in virtual column 23 /zero-width
underbar는 잘 써본적이 없고, 보통 줄의 시작과 줄의 끝을 많이 사용한다. 그리고 c언어 등에서 value이름을 바꿀 때 \< \>를 많이 사용한다. 중복되는 부분들이 많아서 이거 생각없이 쓰면 100%에러가 난다. 
int x; 어쩌고 저쪼고 를 복사해서 int y 에 대해서 똑같이 하고 싶다고 복사한다음에 x를 y로 바꾸면 와장창 에러가 뜬다. \로 쓰면 된다.


Character classes {not in Vi}:                          /character-classes      magic   nomagic   matches /\i     \i      \i      identifier character (see 'isident' option) /\I     \I      \I      like "\i", but excluding digits
/\k     \k      \k      keyword character (see 'iskeyword' option)
/\K     \K      \K      like "\k", but excluding digits
/\f     \f      \f      file name character (see 'isfname' option)
/\F     \F      \F      like "\f", but excluding digits
/\p     \p      \p      printable character (see 'isprint' option)
/\P     \P      \P      like "\p", but excluding digits
/\s     \s      \s      whitespace character: and
/\S     \S      \S      non-whitespace character; opposite of \s
/\d     \d      \d      digit:                          [0-9] /\D     \D      \D      non-digit:                      [^0-9] /\x     \x      \x      hex digit:                      [0-9A-Fa-f] /\X     \X      \X      non-hex digit:                  [^0-9A-Fa-f] /\o     \o      \o      octal digit:                    [0-7] /\O     \O      \O      non-octal digit:                [^0-7] /\w     \w      \w      word character:                 [0-9A-Za-z_] /\W     \W      \W      non-word character:             [^0-9A-Za-z_] /\h     \h      \h      head of word character:         [A-Za-z_] /\H     \H      \H      non-head of word character:     [^A-Za-z_] /\a     \a      \a      alphabetic character:           [A-Za-z] /\A     \A      \A      non-alphabetic character:       [^A-Za-z] /\l     \l      \l      lowercase character:            [a-z] /\L     \L      \L      non-lowercase character:        [^a-z] /\u     \u      \u      uppercase character:            [A-Z] /\U     \U      \U      non-uppercase character         [^A-Z] /\_     \_x     \_x     where x is any of the characters above: character
                       class with end-of-line included


\s를 많이 쓰고 의외로 아래 digit류는 기억이 잘 안나서 오른쪽에 대괄호 형식으로, 풀어서 많이 쓰게 된다. 딱봐도 소문자랑 숫자 섞인것 같은거는 정의 안 되어 있다. 


      magic   nomagic   matches /\e     \e      \e       /\t     \t      \t       /\r     \r      \r       /\b     \b      \b       /\n     \n      \n      end-of-line
/~      ~       \~      last given substitute string
/\1     \1      \1      same string as matched by first \(\) {not in Vi} /\2     \2      \2      Like "\1", but uses second \(\)           ...
/\9     \9      \9      Like "\1", but uses ninth \(\)                                                                E68 /\z1    \z1     \z1     only for syntax highlighting, see :syn-ext-match           ...
/\z1    \z9     \z9     only for syntax highlighting, see :syn-ext-match
       x       x       a character with no special meaning matches itself

/[]     []      \[]     any character specified inside the []
/\%[]   \%[]    \%[]    a sequence of optionally matched atoms

/\c     \c      \c      ignore case, do not use the 'ignorecase' option
/\C     \C      \C      match case, do not use the 'ignorecase' option
/\Z     \Z      \Z      ignore differences in Unicode "combining characters".
                       Useful when searching voweled Hebrew or Arabic text.

\e는 고급사용자면 많이 쓸거다. \1 \9는 a-b를 b-a로 바꾼다거나 할 때 많이 쓴다.  vi에는 \( \) 없다고 한다, 얼마나 힘들겠는가... 그런데 vi에 메뉴얼의 패턴은 정의가 재귀적으로는 되어 있지 않겠다. 

\c는 최근에 쓰기 시작했다. grep은 -i 옵션 find -iname 으로 쓰니까 같이 알아두자. 


2018년 11월 15일 목요일

미디) 신디사이저 용, ts또는 trs 커넥터를 사용하는 페달에 대해 알아보자.



  신디사이저나 마스터키보드 후면에 보면 페달을 꽂을 수 있는 폰잭 암놈 커넥터가 있다.


교회에서 많이 쓴다고 알려진, SP4-8의 경우,  'CC', 'Sustain' 이라고 이름 붙여진 암놈커넥터가 달려 있다.

그리고 진짜 싸구려 제품이나, 미니키보드를 제외하고서는 마스터 키보드의 후면에도 'Sustain'이라 이름 붙여진 포트가 존재한다.



  1. Sustain


여기서 가장 간단한 장치는 'Sustain'이라 이름 붙여진 페달이다. 이 페달은 그랜드피아노는 페달 설명을 들어도 잘 모르겠고, 업라이트 피아노의 맨 오른쪽 페달의 역할을 한다.  밟고 있는 동안, 연주한 건반 모두, 소리가 오래 지속되도록 하는 역할을 맡고 있다. 그렇다 보니, 이 페달은 아주 간단한 형태를 가진다.

그냥 스위치의 역할이다. 밟으면 1, 때면 0 또는 그 반대로 작동할 수 있다. 이건 회사 마다 다르다. 딱히 표준은 없는 듯 하다. 하지만 일단 큰 회사 두개를 따라가고 있다. 그래서 딥스위치로 두 회사의 모드를 다 지원하는 페달을 만들고는 한다.

요즘 악기들은 마이크로프로세서가 좋아진 관계로 여력이 있는지, 기계가 부팅될 때를 밟지 않은 상태로 인식하고 있다.

그렇다보니, 그냥 스위치처럼 input, output 딱 두개의 극만 있으면 된다. 전기공학을 검색하면 이런 간단한 스위치도 종류에 따라 다 이름이 있지만 난 전공자가 아니니 대충 글을 쓴다.
  input으로 정해진(3V) 전위로 연결되고, output쪽이 스위치의 상태에 따라 input과 같은 전위 또는 단락 상태가 되니까 나름 간단한 아날로그 회로이다.

2극이면 되니까 TS 폰잭을 사용한다.


2. CC Pedal(Expression or Volume)

다음은 CC 페달이다. 악기에 따라 Expression 페달이나 Volume 페달이라고 불리기도 한다. 전기기타가 사용하는 Expression, Volume 페달과는 회로가 조금 다르다. 다만 세부적으로만 다르다.

CC 페달은 기본적으로는 가변저항 회로이다.  얼마나 밟았는지에 따라, 가변저항값이 바뀌면서, input1, input2 두개의 입력전압의 사이값으로 신호가 output으로 나가게 된다. 한개는 딱히 Sustain에서 들어오던거랑 다를 이유가 없고, 다른 하나는 ground가 아닐 이유가 없어서, 역시 간단한 아날로그 회로이다.


회로는 간단하나 사람의 발로 연주하는 장치이다보니 밟는 정도를 가변저항노브를 돌리는 것으로 변환하는 기계적인 부분에서 단가가 올라간다.

이것도 밟는 것을 땐 상태 어느쪽을 input1쪽으로 할지를 결정해야 하므로 조금 복잡하다. 하지만 거대 악기 기업들을 대부분 따라가므로 걱정하지말자.

이 장치는 input1(input) input2(ground) output 세개의 극이 필요하다. 그래서 TRS 커넥터를 사용한다.

추가로 가변저항에 종류에 따라 페달의 형태 이외로도 존재할 수 있다.
(센서라고 불리는 친구들이 대부분 가변저항이다.  )

3. Half sustain pedal (Half Damper )

  사실 이 장치 때문에 이 글을 쓰고 있다. 이게 어디에 쓰이는지도 잘 모르기 때문에, 이름은 익히 알았지만, 무시했다. 

  요번에 Half damper 커넥터가 TRS라는 것을 알게되어, 도대체 Volume pedal이랑 무엇이 다를까? 그 둘이 혼용이 가능한가에 대해 관심을 가지게 되어 이리저리 검색을 했다. 일단 한국 사이트들은 내 검색이 문제인건지 관심사가 없는 건지 관련 정보를 찾을 수 없었고, 외국 사이트를 검색해서 답을 얻었다. 

답은 간단하다. 그냥 스테레오선으로 이해하면 된다. left, right 두개의 신호가 오는 것처럼, 이 장치도 두개의 병렬 스위치 신호가 들어온다. 회로도만 볼 때는, 두개의 sustain pedal이 있는 것과 같다.  단지 이유를 알 수 없는 트랜지스터가 포함이 되어 있는데 그것은 이해가 더 필요할 듯 하다. 

그렇다면 페달이 하나밖에 없는데, 어떻게 두개의 스위치를 작동을 시킬것인가? 

이전에 이야기한 Sustain 페달 두 종류를 혼용하면 가능하다. 

밟지 않을 때, 1인 회로가 있다. 페달을 밟는 순간 회로가 단락되어 0인 신호로 바뀔 것인다. 그다음 밟았을 때 '1'인 회로가 있다. 꾹 밟았을 때, 회로가 연결되어 '1'인 신호가 나오게 될 것이다. 

하프댐퍼를 알기전에는 두 종의 서스테인 페달이 연주상의 차이가 있을 것이라 생각지 못했다. 하나는 살짝 밟아도 신호가 변하지만 하나는 꾹 밟아야 신호가 바뀐다. 동일한 발동작으로도 다른 연주가 될 것이다. 클러치를 밟는 것처럼 브레이크를 밟으면 사고가 난다. 다른 페달이란 것은 그런 것이다. 

자 그렇다면 이제 중간만 밟는 신호라는 것이 만들어진다. 완전히 땐 상태는 (1,0)신호가 나가고 있고, 반만 밟은 상태에서는 (0,0)의 신호가 나가고 있으며, 완전히 밟은 상태에서는 (0,1) 신호가 나온다. 그 다음은 기계에 들어가서 알아서 잘 해석이 되어, 세가지 상태를 처리하는 것일 거다. 


장비들을 보면, 가끔 한개의 잭으로 두개의 페달을 작동시키는 물건들도 있고, 디지털피아노로 나무로 잘 씌어서 파는 물건들이 있는데, (페달3개) 이러한 물건들은  이 회로 자체를 병렬로 두개의 페달에 연결하는 제품이다.  그리고 3개짜리는 젝을 하나더 연결함으로서 완성이 된다. 


4. 총론 

  정리하면 간단하다.  서스테인 페달은 2극 커넥터가 필요한,1비트 디지털 신호를 만드는 회로이다. 하프 서스테인(댐퍼)페달은 이 서스테인 페달 회로의 병렬회로이며, 3극 커넥터가 필요한  2비트 신호의 디지털 신호이다.   CC페달은  3극 커넥터가 필요한, 가변저항을 이용한 아날로그 회로이다. CC페달이라고 불리기 때문에, 기계에 들어가서는 보통 7bit신호로 0-127의 값을 가진다. (14bit신호도 가능하다. 아날로그로도 처리될 수 있으나 그럴때는 CC페달이라고 부르지 말자 )
  아날로그 신호를 디지털 신호로 바꿀 때는 선형일지 어떨지는 내부적으로 정해진다.(타블렛 펜 신호등처럼) 

  손연주도 안되는 사람들은 여기까지 이 글을 읽었다면 정말 대단하지만 반성하도록 하자. 
나는 더 반성하겠다. 

  
  그림을 넣어야 사람들이 많이 보는 글이 되겠지만 귀찮다. 

2018년 11월 11일 일요일

HOMM3) 베이스 데미지는 어떻게 선택될까?

http://heroescommunity.com/viewthread.php3?TID=20955
의 글을 참조하였으며, 위글 작성자의 실험의 의한 결과이다.
이 글은 폰으로 작성했다.


히어로즈에서 데미지 계산과 관련된 것은 중요한 이 슈 중 하나다 그 계산법에는 베이스 데미지라는 것이 들어가는데 그 계산은 기본적으로 한스택의 유닛이 가지고 있는 최저 데미지에서 최대데미지 곱하기 유닛의 수로 정해진다고 알려져있다.


그렇다면 도끼 창병 100마리 일 경우 최저 데미지 최대 대미지 그리고 그 숫자를 포함하여 계산해 보면 200--300에 데미지 값을 가질 것이다. 그렇다면 200에서 300 사이 모든 정수가 동등한 확률로 선택 될 것인가 아니면 그 사이에 있는 실수가 선택이 될 것인가 어떻게 선택될 것인가는 중요할 것이다.

   다만 실험의 결과로 계산을 해 볼 시 선택되는 데미지는 일정한 간격을 가지는 것을 확인할 수 있다 그 결과는 다음과 같다 스타 계수가 열기 이하일 경우는 경우는 그 숫자만큼 각각의 대해서 정수 난수 발생기를 통해서 동등하게 골라지도록 고른다.

 그리고 그 값을 더 한다.  쉽게 생각하면 열기의  유닛이 각각 한 대씩 때렸을때 데미지를 생각하면 된다 만약 스택이 열기가 넘을 경우는 여기까지 계산을 하고 유닛에 숫자 n 나누기 10을 곧 방값을 베이스 데미지로 선택한다.

 이 결과가 얘기하는 반은 간단하다 숫자가 많던 적던 평균 데미지는 동일하게 정해지고 그 분포는 10기까지는 다르게 정해 쉬다가 그 이후로는 분포가 고정 된다 이런 식으로 계산한 이유는 이상적ㅇ.로야 각 유닛이 한대씩 때리니까 각각 난수를 돌리면 되지만 천기가 넘아가게 되면 난수 발생기를 돌리는 행위도 컴퓨팅파워를 많이 먹어 충분한 부담이 되기 때문일 것이다.

거기다가 숫자가 커지면 커질수록 편차값이 줄어들어(sqrt(N)이지만 한마리당은 1/sqrt(N)) 져 최대데미지가 선택될 확률이 점점 줄어들게되기 때문이다.

뭐 어떻게 하던간에 기대값은 동일하다.

다만 분포가 달라지고 베이스 데미지가 가질 수 있는 값은 각 유닛의 데미지 범위 내 정수 의 10제곱 값중에 한 값이 정해지는갓은 확실하다.


실습을 좀 해보도록하자

일단 마스터 그렘인 4기가 누군가를 공격한다면 베이스 데미지는 다음과 같다.
 1-2 1-2 1-2 1-2 4번 돌려서 정한다.
최소 데미지가 나올 확률은 (1/2)^4 = 1/16이다.
최대도 그러하다.
그리고 모두 고려하면
데미지 4     5        6               7    8
         1/16  4/16   6/16    4/16 1/16
이다. 이런식으로 10기까지만  계산하고 그 이상은 그냥 곱한다. 그렇기에 10기 이상의 마스터 그렘린의 최대(최소) 데미지가 선택될 확률은 1/1024로 동일해진다.

드레드 나이트의 경우는 10기 이상일 경우 나가여왕이랑 동일한 데미지가 선택되려면 15-30 총 16개 중에 선택되므로, 1/2^40 즉 하드디스크 계산법을 쓰면(근사지만 많이 날라감 10^3 simeq 2^10) 대략, 1조번 때리시면 한번정도 선택되겠다.

마리당 30의 데미지를 주고 싶으면 그냥 나가여왕 쓰자....

일단 가짓수만 1테라다. 이거 표로만드는 것도 쉽지 않다.

음 이게 시사하는 바는 간단하다. sod에서는 하단에 최저에서 최대 데미지가 뜨고 HotA에서는 죽일 수 있는 유닛의 수가 뜬다. 최대만 보고 다죽을거 생각해서 전투하면 심히 골룸하다. 데미지가 이지선다형인 그렘린도 4기일때 최대 데미지 잘 안나온다.

불확실성에 기대지 말고 축복을 걸자.


그냥 모든유닛의 데미지는 평균값으로 고정됐다고 생각하고, 사는게 편하다. 

도마뱀전사는 3.5이고, 그랜드엘프은 4x2인 것이다. 마스크맨은 3x2인 것이다.

두대 때리는 친구들은 한스탁당 한번 공격소비으로 난수를 20개까지 돌린다. 최대값은 더 안 나온다.


난수를 많이 쓰는갓을 싫어하고, 정수 난수만 쓰는거보면 고르곤도 적당히 계산하다가. 말 것 같은데 이건 문서를 찾아보던가 직접 실험하서 분포를 그려보도록 하자.


2018년 11월 2일 금요일

HOMM3>석갑 스킬의 쓸모에 관한 글

1. 석갑과 관련된 각종 마법들을 먼저 서술하자. 

  • Lv1 Earth. 석갑 초급 방어력 +3, 중급이상 +6  
  • Lv1 Earth 방패 초급 근접데미지 감소 15%, 중급이상 30% (0.85, 0.7) 
  • Lv3 Air 공기방패 초급 원거리데미지 감소 25%, 중급이상 50% 
  • Lv2 Water 약화. 적의 공격력 -3, 중급이상 -6
여기서 석갑과 방패는 각종 자원이 들지 않고 시청트리에 들어가는 마법길드 Lv1에서 등장하는데다가 흙마법이기 때문에 비교를 많이 당한다. 그렇다면 어떤 마법을 사용하는 것이 좋을 것인지 수치로 비교를 해보자 
2. 석갑에 효율 계산을 위해서 HOMM3의 기본 계산기를 가지고 와서 계산하도록 하겠다.  

이 계산에는 많은 것들이 생략되어 있다. 다만 방어술, 원거리 페널티, 성벽페널티 등은 복리연산이므로 별로 중요하지 않다는걸 말하도록 한다. 공격술, 증오, 행운 등은 계산 방식이 유사하므로 공격술  그래프를 참조하면 된다.

기본 계산은 다음과 같다. 기준은 내가 석갑 사용자일 때를 가지고 하도록 한다. <여러가지 모든 계산을 거치고 복리계산에도 한계점이 있지만 무시하자.>

기본 계산식은 기본데미지 =(공)[minDMG,maxDMG]*숫자 * A1*R1*R2

if ( (RDEF=방어력 - 상대공격력) > 0 )
       then
          A1= 1
          R1= MIN(1-0.025*RDEF, 0.3)
        else
                RATT=-RDEF
                A1 = MAX(1+ 0.05*RATT,4)
                R1 = 1
endif.

로 정해진다.
 
쉴드의 계산은 흙마법 중급이상일때 R2=0.7, 초급이하는 R2=0.85로 한다.


석갑의 계산은 중급기준 {A1*R1}(RDEF+3 or 6)/{A1*R1}으로 석갑마법이 걸리기 전과 비교해서 상대적으로 얼마만큼의 데미지가 감소될 것인지에 대해 계산한 양이다. 

이 계산식을 가지고 libreoffice calc를 통해 표를 만들고 차트를 그려보았다.
요 프로그램은 차트를 예쁘게 그리는 방법을 모르므로, 나중에 다시 gnuplot으로 예쁘게 그리도록 하고, 일단 올려보면 
  빨간색 선은 초급 석갑일 때의 그래프이다. 내 상대방어력이 20보다 크기 시작할 때, 초급 쉴드보다 효과가 좋은 것을 알 수 있다. 다만 상대방어력이 20보다 크기는 쉽지 않다. 대천사나, 대사탄으로 양학할 때는 쉴드보다 좋다.
 
노란색 선은 중급이상 석갑일 때 그래프이고, 같이 움직이는 검정선은 상대방이 공격술 고급일 때의 그래프이다. 행운, 중오 등도 동일한 형태로 살짝 이동한 형태로 그려진다.  상대방어력이 -19로 매우 낮은 상태일 때부터 초급 방패보다는 효과가 크게 그려진다. 다만 쉴드도 흙마법이기 때문에 큰 의미는 없다. 

  상대방어력이 0보다 클때는 검정선과 같이 움직이므로 상대방 능력은 석갑의 효율과 별 상관이 없다. 다만 상대방어력의 한계점 근처이다보니 계산식이  미분불가능한 영역이 있다.  상대방어력이 21,22일 때만 쉴드보다 강력한 기능을 발휘 한다.

재미로 Air shield를 포함했다. 가중치가 굉장히 크다보니, 상대방 궁수에게 계속 얻어맞는 상황이라면 어떤 마법보다 강력하다. 고급 공기마법은 근처에 가기도 힘들다.

중급 흙마법이 있고, 초급이하의 공기마법이 있다면 내 상대방어력이 16보다 큰 순간부터 공기방패보다 좋은 가치를 지닌다.

3. 결론. 
 히어로즈에서 궁수를 상대하는 기본 전술은 상대방에게 근접유닛을 붙이는데서 시작한다. 속도가 빠른 유닛이 없어서 화살공격을 맞아야 하거나, 하는 순간이 아니라면, 방패마법이 대부분 효율이 좋다.
(그리고 조금만 넘어가면 효율이 사라지므로(한계점이라) 그냥 방패쓰자)

  몸이 돌이 되지만, 몸으로 맞는거보다, 방패로 막는게 더 좋다. 다만 이미 돌처럼 단단한 자에게는 돌이 철이 되는 기적이 보여진다. 

  다만 보통 일반적인 상황에서 고급석갑 마법은 초급 방패마법 이상의 능력을 보이므로,(복리) 내파나, 연속번개, 메테오 같은 마법이 없다면 고급 석갑을 이어서 또 써주도록 하자. 
  고급 방어술이 15% 감소이므로 무시할만한 양은 아니다.

4. 번외. - 약화 등등 
상대방이 블러드 러스트가 걸렸을 때는 어떤 것이 효율이 좋은가. 
  그래프가 복잡하므로 여기에는 고급만 넣어서 보도록 하자. HoTA에 오우거 세트가 생겼으니 가끔 블러드 러스트를 겪을 수 있다. (??? 정말 가끔)

  약화는 석갑과 마찬가지로 상대방어력으로 계산하는 양이고 값도 동일하다 다만 흙마법이아닌 물마법이다. 요건 X축을 좀 줄였다. (X축이 부호가 이상하네.)
  고급 스톤스킨은 대부분의  고급방어술에 능력치 이상의 능력을 발휘했다.  블러드러스트 마법은 고급 공격술 정도의 가치를 가진다.

일상적인 상황에서 고급 방패보다. 효과가 있으려면 고급석갑과 고급약화가 동시에 필요하다. 그래서 방패 방패 하는 것이다. 하지만 두턴이나 필요하다는 사실을 기억하자. 방패가 없어도 지나가는 드래곤 플라이를 잡아다가 던져주는 방식을 쓰면 방패보다 강력할 수 있다.
  인챈터가 부대에 있어서 석갑이나, 약화를 사용한다면 냉큼 쉴드를 사용하자. 피해감소율이 마법쓰기 전과 비교했을때, 거의 절반에 육박한다.
  마법의 대지가 있다면, 지니 부대를 최대한 분배하자. 약화나 석갑만 나와도 매우 감사하다.
  한턴만에 데미지를 절반으로 감소할 수 있는 것은 쉽지 않다. 공격술과 방어술과 달리 이건 내 선택에 의해서 전투중 변화하는 부분이다. 

진 초록색 그래프는 블러드 러스트가 걸린 적에게 약화마법으로 상쇄시켰을 때의 데미지 변화이다. 
  상대방이 블러드러스트가 걸렸을 때 내가 어떤 마법을 쓸지를 비교하려면, 쉴드와 Blood>Weak를 비교해야 한다. 뭐 대략 일반적인 상황해서 방패보다. 매우 막강하다는 사실을 알 수 있으나 이런 일은 거의 없다. 블러드러스트 마법자체가 똥이다. 그래도 오우거 메이지가 사이클롭스 옆에 붙어 있는 상태로 다른 녀석에게 블러드러스트를 건다면, 냉큼 드래곤플라이 고기방패를 보내자. 

  Blood+Shield는 그냥 데미지가 어느정도 되는지 보기위해 넣었지 내가 방패를 쓸지 말지를 결정하는데는 큰 의미는 없다.

내가 약화 마법이 걸릴일은 없겠지만, 혹시 걸린다면 즉각 블러드러스트로 상쇄를 시켜주자. 저 그래프의 휘황찬란함을 보라. 마법쓰기전에 유닛위에 올려놓을 때 나오는 데미지 계산 범위가 단숨에 뻥튀기가 된다.

헤이스트나 슬로우는 워낙 중요한 마법이니까, 쓰는거지 적이 상쇄하면서 긍적적인 효과를 주는 마법은 HOMM3에서는 최대한 피해야 하는 마법이다.

  저주마법과 축복마법, 블러드러스트와 약화마법, 헤이스트와 슬로우는 상쇄가 되니 조심해서 써야하고,  헤이스트와 슬로우의 관계는 더 효과가 크다.
  이쪽은 그렇게 무섭다는 땅마법과 공기마법이다.



4. 사족. 내가 포트리스 유저라면, 드래곤 플라이를 아끼지 말아야 한다. 남는 칸은 드래곤플라이 1로 채워넣자. 그리고 반드시 가운데 칸은 드래곤플라이로 채워야 한다. 다른 녀석들은  두자리를 차지한다. 이 유닛을 소모해서 다른 유닛을 모으는게 포트리스 전략의 핵심이다. 적당히 줄여놔야, 성전투일 때도, 성이 쏘는 화살을 이 친구가 맞아준다. 





2018년 10월 24일 수요일

외교술이 게임 프로그램 내부에서 어떻게 작동하는가? (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. 퇴각은 시킬 수 있다. 

2018년 9월 13일 목요일

구글은 android에 외장 메모리 모드 좀 다시 만들어 주면 안되냐...



윈도우는 어떤 형편인지 모르겠다만,

리눅스에서 v30으로 usb 3.0모드로는 mtp나 ptp모드가 작동을 안한다.


뭐 번들케이블이 usb 2.0 type c to usb 2.0 type a인것을 보고 그럴꺼라 생각은 했다만,


수많은 시도를 했지만 안되는 것으로 결론이 났다.


뭐 양쪽 칩셋이 3.0지원하는 칩셋이라 2.0으로도 초속 30MB/s가 나오는 상황이라 큰 불편은 없지만,

그래도 엄청난 속도를 기대하고 케이블을 샀음에도 사용하지 못하는 마음을 좀 알아달라...



LG는 ptp 모드에서 video capture나 image capture를 지원하도록 해봐라...
이런거는 보안 문제 때문에, 제조사가 아니면 못하는 부분인것 같은데,

애플은 quick time player로 이거 가능하다고 알고 있다. 

가능하면 LG gram하고만 그게 가능하게 해주던가...

스마트폰 카메라가 정말 좋은 상황이지만, 방송은 PC로 하는게 관리에 있어서 좋으니까 좀 같이 사용할 수 있게좀 해달라...

뉴스 홈페이지 댓글 관련 플러그인인 LiveRe는 광고 차단하면 작동하지 않습니다.


쿠키를 차단하면 로그인이 되지 않습니다.


광고를 차단하면 댓글을 작성해서 보내기를 누르면 내가 쓴글이 날라가고,
로그인이 안되어 있다고 하거나(로그인 되어 있으나)

그냥 버튼이 먹통이 됩니다.



그냥 이 사이트에서 일시중지 눌러서 글 쓰면 됩니다.

에드블록 말고도 광고차단 플러그인이 있을 수 있으니 신중하게 찾아보세요.

가장 많이 본 글