2019년 3월 29일 금요일

[20190329] 잡설 - 바닥

facebook에서 옮겨옴.

-------------------------------------------------------

거덜난 몸의 회복을 위해 4주 정도 쉬었다.

실질적으로는 2주 반 정도 쉬었는데, 1주 반 가량은 지원사업 신청을 위해 지원서와 포트폴리오 작성 그리고 PT/면접을 하면서 보냈다.

어제 메일이 와서 보니 떨어졌단다.
멘탈에 살짝 금이 갔다.

기대를 안했는데도 이모양인건 아마도 지원할만한 유의미한 지원사업이 이외에는 없기 때문일거다.

떨어진 이유를 알려달라고 메일을 보내놨다.
시간 낭비 방지 랄까... 예상이 가는 이유가 있고 그게 맞다면 다음 공고때 지원해봐야 될리가 없으니까 여기서 확실히 해두기로 했다.

4월 1일 부터 작업을 다시 시작할 듯 싶다.
두렵다.
이번 개발은 지난 개발과 비교해서도 많이 고통스럽다.
아마 그래서 두려운 걸꺼다.

몸은 회복했는데 마음은 회복하지 못했다.
휴식을 시작할 때쯤의 나는 창의력의 바닥과 마주하고 있었고 그건 지금도 변하지 않았다.

어째야 하려나.

이것들이 얽히고 섥혀서 날 잠못들게 하나보다.
( '_')y-~

> 오른 손목을 빼고는 많이 회복했다.
> 고민에 고민을 거듭하다가 지원서를 낸것은 바닥난 내면 회복을 위한 계기를 찾고 싶었던 것이 컸다.

2019년 3월 27일 수요일

[20190327] 아직도 휴식중.

여전히 눈가의 경련이 문제입니다.

면역력은 충분히 회복되었습니다.
눈은 잠만 잘자면 문제 없을 것으로 보이고요.
손목은 딱히 좋지 않지만 지속적인 통증은 없네요.

잠을 잘자야 눈가의 경련이 잦아들텐데 쉽지 않군요.


2019년 3월 26일 지난 글에 언급했던 개발지원 사업의 2차 심사를 위해 판교에 다녀왔습니다.
PT와 간단한 질답이 있었습니다.

시작 시간보다 20분 정도 이르게 도착했는데 선착순이었는지 10분 가량 기다리다가 가장 먼저 심사를 받았네요.
20분 가량 걸렸습니다.

소위 PT 라고 부르는 행위를 7년??? 만에 했더니 긴장을 많이 해서 힘들었네요. @_@


지원서와 포트폴리오를 확인하지 않고 앉아 계신 분들이 몇분 계셔서 살짝 당황하기도 했습니다.

안내 메일에는 PT를 3 - 5분 으로 끊어달라고 적혀 있었고, 저는 15장 분량의 페이지를 만든다음 5분 안에 설명을 마칠 수 있도록 준비를 열댓번 하고 갔거든요.

"이럴 거였으면 길어지는 것을 감안하고 동영상을 ppt에 넣을걸."

...이라며 후회했지만 소용없는 일이죠. ( '_')y-~

판교는 여전히 좋았습니다.
하늘이 잘 보인다는 점이 특히나요.


운동과 산책을 열심히 하고 있습니다.
얼른 건강해지고 싶습니다.
( '_')y-~

> 4번 고침




-------------------------------------------------

실패~!

개발 많이 되었는데 왜 왔느냐는 질문을 받았을때 느낌이 오긴 했습니다만... 씁쓸하군요.

지원금이 정말 아쉬운 상황인데.... 하아...

( '_')y-~

-------------------------------------------------

기대 안했는데도 떨어지니까 많이 아프군요.

멘탈좀 추스려야겠습니다.

( @_@)y-~

2019년 3월 21일 목요일

[20190321] 여전히 휴식중.

눈가의 경련이 적어도 오전에는 없습니다.
몸이 약간은 회복된 것 같네요.

요 며칠은 잠도 제법 편안하게 잤습니다.
작업을 접어둔 이후로 편히 잔 날이 없었는데 참 다행입니다.

쉴때면 처음엔 꼭 아픕니다.
아드레날린에 취한 몸이 아픈줄도 모르다가 약빨이 떨어지면서 한군대씩 터져나오는게 아닌가 싶네요.
어제는 뜬금없이 왼 손목이 아프더라구요. ( o_o)y-~


개발지원을 사소하게 받을만한 것이 있어서 지원서를 넣었습니다.
Installer는 거기서 요구하는 포트폴리오 를 만드느라 했던겁니다.

지원서 작성과 이런 저런 정리에 3일 약간 넘게 들었습니다.
마지막의 마지막까지 망설이다가 제출 약 3일전부터 작업을 했고 마감 1시간전에 지원서를 보냈습니다.

보내는 순간까지도 "하지 말까?" 고민했지만...
"에라이 모르겠다. 일단 만들었으니 보내."
...로 마무리 되었네요.

1차 심사, 2차 PT + 면접의 과정이 기다리고 있습니다.

몸이 이지경이라 1차를 통과해도 기껍지는 못할듯하네요. 지원금이 아쉬운 주제에 말이죠.
2차까지 통과하면 판교로 출퇴근을 해야 합니다. 매일 지하철 3시간 코스죠. ( -_-)y-~

아마 안될겁니다.( 난 안될거야~!~! 으아아아아아~! )
지원서와 프로젝트 계획서를 잘 작성하지 못했거든요. @_@
맛이간 몸으로 문서를 쓰려니 머리가 너무 안돌아가서 이건 아니다 싶었습니다.

과연 어찌 될런지.

( '_')y-~

> 5번 고침


--------------------------------------------------



2차 준비 해야 할듯
( '_')y-~

2019년 3월 15일 금요일

[20190315] 계속 휴식...중?

해보고 싶은 것이 있어서 어제 오늘 약간의 작업 아닌 작업을 했습니다.

첫 작업은...
Visual Studio의 확장( ? ) 기능으로 제공되는 Setup Project 를 활용한 Installer 제작.

두번째 작업은
iexpress.exe 를 활용한 배포패키지 제작 입니다.
이 녀석은 C++ 배포 패키지와 게임 Installer 를 묶어뒀다가 압축을 풀고 순차 실행해주는 용도입니다.

오후 4시쯤 시작해서 현재 시각 10시.
6시간이 걸렸네요.

Steam 출시를 마음먹은 이후 막연히 "Installer 어떻게 만들지?" 라고 고민해왔는데 해보니 크게 어렵지 않네요.
이득 본 기분입니다.
( ^_^)y-~

눈이 매우 피곤하네요.
쉬러갑니다.

( '_')y-~

> 3회 고침

2019년 3월 12일 화요일

[20190312] 계속 휴식중

눈가의 경련이 좀처럼 나아지질 않네요.
( '_')y-~


------------------------------------------------------


책을 읽고 있어요.


시작.
천천히 글 버릇을 고쳐가며 읽을 생각이다.

( '_')y-~

2019년 3월 11일 월요일

[20190311] 휴식중

회복이 무척 더디네요.
작업이 무척 하고 싶습니다.
( '_')y-~


----------------------------------------------------


책을 읽었어요.



# Art & fear

이야기가 현실에 머물러 있는 동안에는 제법 흡족했으나 거기까지였다.
번역의 투박함이 특히나 아쉽다.

공포와 불안을 다룬 부분은 다른이들에게도 소개해주고 싶을 만큼 가치가 있었다.
인디질을 하며 가진 고민중 일부를 정리할 수 있었다.

재능에 대한 이야기도 공감이 많이 갔다.
우리는 재능이니 천재니 하는 말을 쉽게 소비해버리는 시대를 살고 있고, 그에 걸맞게 재능에 대한 근원적 고민을 가진 사람들이 많다.
정답이 없는 문제지만 이 책의 논지는 고민을 털어버리기 위한 하나의 해결책으로서 활용할법하다.

나머지 부분들은 그저 그랬다.

( '_')y-~

> 한가지 재능을 가질 수 있다면...
> 마지막의 마지막까지 갔을때 꽃피울 그런 재능을 가지고 싶다 생각했다.
> 그렇게 생각하니...
> 무언가 시작할때 재능이 있느니 천재적이니 하는 말은 도대체 얼마나 의미가 있는 것일까?
> ...라고 생각하게 되는 것이다.
> 한계까지 가봤더니 도무지 내가 할 일이 아니었다면...
> "뭐 어때 하는 동안 즐거웠잖아."
> ...라고 맘편히 생각하기로 했다.


----------------------------------------------------


친구를 한명 사귀었어요.


길 가다 만났고요.
단 돈 3000원에 친구가 되어 주었습니다.

잘 지내보자구.

( '_')y-~

> 여러개의 화분중에 가장 비리비리한 녀석으로 사귀었습니다.
> 괜히 그러고 싶더라고요.

2019년 3월 5일 화요일

[20190305] 쉬어갑니다.

몸이 다방면으로 좋지 않습니다.

안압이 올랐고
면역력은 떨어졌습니다.
오른손목은 여전히 아프고요.
오른손목에 부담을 덜어 주려고 왼손을 많이 썼더니 왼손 엄지쪽 인대가 아파오네요.
몇 달째 눈가에 경련도 있습니다.

쉬어야만 하는 시절이 돌아왔습니다.

작업은 안압이 정상이되면 다시 시작할 겁니다.
그럼 그때까지 안녕~!
( '_')y-~


2019년 3월 3일 일요일

[20190303] A lot of work

경사로운 3.1 절 100주년을 보냈습니다.
어릴적부터 가져왔던...
"어째서 독립유공자들은 고생은 고생대로 하고 저리도 힘든 삶을 살아야하나"
...라는 문제의식을 다소나마 해소할 수 있었네요.

아직도 많이 남은 부조리들이 잘 정리되면 좋겠습니다.
( '_')y-~


작업 이야기로 들어가볼까요.

이 일지는 2019년...
2월 12 ~ 15, 18~ 22, 25, 26, 28일
3월 2, 3일
...에 있었던 작업을 대상으로 합니다.

작업을 진행하다가, 추가 작업이 발굴되고, 다시 발굴되고, 또 발굴되어서 13일간의 작업으로 이어졌습니다.

작업 내역은...
  1. Spawn Process 정립 및 적용
  2. 모든 Actor를 위한 Action Build Process 추가
  3. Actor별로 특수화 되어 있던 A.I State를 공용으로 정리
  4. Table 에서 A.I 세부 옵션들을 지정가능하게 조정
  5. Actor들이 작동 가능한 Game Master Turn State 를 Table에서 지정
  6. Trigger 관련 Game Master State 보강
  7. Trigger A.I 에 이동기능 추가
  8. 전체 Trigger A.I Refactoring
  9. Monster 추가 : Fallen Wizard Brown
...입니다.

Dot 조금 그리고 막대한 양의 Refactoring 작업이 전부라서 보여드릴 것들은 얼마 없습니다. 그리고...


200개 가까이 commit 이 이루어졌기 때문에 일일이 설명할수는 없습니다.
그리하여 지난 일지와 비슷하게 작업의 흐름을 설명 해볼까 합니다.



1. 발단

작업은 아주 맘편하게, 번아웃이 지나가길 기다리며 시작되었습니다.
우선 Dot를 찍었습니다.

< f.w.b idle_2 x1 >

< f.w.b idle_2 x4 >

< f.w.b idle_2 x8 >

( 앞서 올라온 잡설에 이 녀석의 animation이 여럿 있기 때문에 간단히 넘어갑니다. )

이어서 진행된 A.I 작업에서 일이 꼬이기 시작합니다.

새로 만들어질 A.I 는 특별함을 가져야만 했습니다.
이 녀석의 존재 이유는 Boss전에서 마주할 함정소환 패턴의 연습 상대가 되어주는 것입니다. 단순한 형태일지라도 Boss가 하는 기능과 비슷한 기능을 소화 해야만 했습니다.

A.I를 작성해서 함정을 뿌려 봤습니다.


잘 작동 하는군요. 그런데... 재사용성이 0 입니다.

앞서 만들었던 Monster나 Item 을 실시간으로 뿌리는 기능들도 모두 전용 Code 로 이루어져 있습니다.

Hard한 Code를 적당히 돌려 쓰는 것은 얼마든지 가능합니다. 그때 그때 고쳐가면서 조금씩 확장해도 문제는 없겠죠.
하지만 이 게임은 Actor가 어떤 행동을 할수 있다면, 반드시 같은 행동을 Silent Action 으로도 처리 할 수 있어야 합니다.


여기서 Silent Action이 무엇인지에 대해서 간단히 짚고 가겠습니다.

이 Game은 시야가 밝혀진 곳과 밝혀지지 않은 곳이 있습니다.
그리고 모든 기능은 Player를 우선으로 진행됩니다.
만약에 밝혀지지 않은 곳에서 Actor들간에 공방이 발생하거나, 무언가를 Spawn 한다면 어떨까요?
보이지도 않는곳에서 벌어지는 일 때문에 유저는 영문도 모르고 연출 시간동안을 멀뚱히 대기해야 합니다.
이동중이었다면 칸을 이동할 적마다 뚝 뚝 끊어지는 것으로 보이겠죠.
이런 상황을 피하기 위해서 시야 밖의 Actor는 시간을 점유하는 연출을 하지 않고, 한 tick 안에 모든 처리를 끝내서 유저가 기다리지 않게 합니다.
이걸 Silent Action이라 부르고 있습니다.


즉 Actor가 가진 각각의 행동은 연출이 포함된 처리와 포함되지 않은 처리 두개가 하나의 짝을 이루게되는 겁니다.

행동이 많아봐야 10개 정도 요구된다면, Hard 하게 Code 를 작성해도 괜찮을지 모릅니다. 하지만 우리는 모두 알고 있죠. 그럴리가 없습니다.


2. 전개

그러면 어떻게 해야 할까?
우선 각각의 A.I에 작성된 전용 Code가 이런 일을 해서는 안됩니다. 흔히 "일반화" 라고 하는 작업이 필요하게 되어버렸습니다.

기능을 일반화 하기 위해서는 규격이 필요하고 규격을 만들려면 요구사항을 모아야 합니다.

그 첫 단계로 "Spawn Info Table" 이 추가 됩니다.
첫 "일반화" 대상으로 최근에 작업한 함정 소환 기능을 선택했습니다.
Data를 Table로 말끔히 털어내고 관련 Code를 정리 합니다.
이어서 Monster Spawn.
마지막으로 Item Spawn 기능이 작업 당합니다.

진행하다보니 주어진 위치를 기준으로 Spawn 될 장소를 뽑아내는 기능을 Table에서 지정가능해야 하다는 것을 알게 되었습니다.
알게 되었으니 만듭니다.

< dir8, 1Loop, Linear, spawnx3 >

< dir8, 1Loop, Random, spawnx3 >

< dir1, 3Loop, Linear, spawnx3 >

< bsp, 2Loop, Random, spawnx4 >

이 밖에도 많은 기능들이 차근 차근 작업되어 모두 Table로 빠져나왔습니다.


3. 절정

다음 작업은 만들어진 기능들을 Common Action에 포함시키고, Silent Action 으로 만드는 겁니다.

이 작업의 핵심은...
"시간을 점유하고 연출을 동반하는 기능" 과 "Silent Action" 은 서로 오차가 없어야 한다는 겁니다. 그러려면 주요 기능을 잘 정리해서 양쪽이 연출 이외에는 동일한 기능을 사용해서 작동하게 해주어야 합니다.

Server와 Client가 Lib를 공유하는 경우와 비슷한 느낌입니다.


그런데 작업을 하려고 보니 큰 문제가 있습니다.
Common Action Generator와 Silent Action Processor에 작업을 해야 하는데 이녀석들은 모두 Monster 전용입니다.

게다가 Common Action Generator를 적용하려면 Game Master A.I 가 구동하는 Turn Management Rule 에 맞게 움직여야 하는데, Trigger는 이것을 위한 준비가 전혀 되어 있지 않습니다. @_@

기능이 여기까지 올줄 모르고 가급적 야비롭게 줄타기 코드를 작성해왔는데... 속죄의 시간이 왔습니다.
대규모 Refactoring의 시간입니다.

먼저 Monster 전용으로 만들어진 기능들을 BaseActor 기준으로 사용가능하게 바꾸고 중복 기능을 제거합니다. ( 지옥 같은 rename 시간이었습니다. )
공용 기능들이 BaseActor 기준으로 작동한다면 각 Actor들이 있어야할 이유 또한 줄어듭니다. Actor의 종류를 줄입니다.
각 Actor를 구분해서 작동하던 Game Master A.I 의 Turn Management Rule 역시 Actor구분의 중요도가 감소합니다.
적용될 Rule 정보를 Table로 빼내서 개별 Actor에 대한 의존성을 제거합니다.

.
..
...
아이고 적으려니 끝이 없네요.
여기서 작업 내역에 있는 대부분의 일이 이루어졌습니다.

Trigger A.I 전체가 Refactoring 되었고
Monster A.I 의 상당부분도 Refactoring 되었습니다.
많은 기능들이 통합되고 사라졌습니다.


4. 결말

사실상 Game의 골격이 완성되었다고 보면 될것 같습니다.

그리고 마지막으로 "Fallen Wizard Brown" 의 A.I 를 위해 Golem Crystal 의 A.I 를 조금 손봤습니다.


5. 뒷 이야기

본래 여기까지 Code를 끌어올릴 생각은 없었습니다.
Silent한 기능들이 필요 없었다면, Hard 하지만 유지 가능한 수준의 Code를 마지막 까지 끌고 갔을 겁니다.

1인 개발을 해보니 게으름이 약간 가미된 코드를 선호하게 되었습니다.
디버깅 하기 좋더군요. @_@
추상화 수준이 낮은 코드가 편하달까요.

하지만 필요한 곳은 추상화 해야만 하겠죠. 그런 취지의 작업이었습니다.

여담으로 Monster "Fallen Wizard Brown" 추가 작업은 실패 입니다.
A.I 구상을 위해 머리를 여러모로 쥐어짜봤지만 일반 몹으로 만나기에는 상당히 불합리한 녀석이라고 결론 내렸습니다.
디자인을 조정하고 몬스터 등급을 올리거나. 좀 더 단순하게 작동하도록 조정해야 할겁니다.

작업을 신나게 해놓고 실패라니. 이것 참 재미있네요.



다음 일지는 가급적 빠르게 작성할 생각입니다.
쌓이니까 복기 할 것이 많아서 작성이 너무 힘드네요.

미세먼지가 저의 좁은 세상을 뒤덮고 있습니다.
휴식을 가지고 싶다고 간절히 바라고 있는데 이 녀석들은 정말 자비롭지 않네요.
얼른 긴 산책을 나가고 싶습니다.

미세먼지는 1급 발암물질이랍니다.
다들 마스크 꼭 쓰시고, 공기 청정기도 꼭 사용하세요.

전 밤을 꼴딱 새운 관계로 쉬러 갑니다.
( '_')y-~

> 글을 많이 고쳤습니다. 세어보진 않았지만 제법 많았으니까 대충...
> 20번
> ...으로 해두겠습니다. o_o
> 또 고칠지 몰라요.
> 공돌이 문돌이 스위치 갈아 넣는데 너무 오래 걸린다. 후우.
> 아이고 빡셔라.

2019년 3월 2일 토요일

[20190302] 잡설 - 그렇잖아.

일지를 써야 한다는 일념으로 오늘 작업을 시작했다.

이러면 안되는건데 말이야.

나놈아.
그렇잖아.
( '_')y-~


--------------------------------------------------------


그러나 일지를 쓰지 못했지.
( '_')y-~