2019년 4월 30일 화요일

[20190430] 잡설 - 아퍼

감기가 아주 제대로 걸렸다.

토요일 경조사에 다녀오고 부터 으슬으슬 하더니 오늘 발병한 모양이다.

어제 눈의 상태가 급격히 악화된 것이 아마도 전조였을텐데... 전혀 눈치 채지 못했다.
제법 오랜 시간 가벼운 초기 증상만 겪었던 덕에 그냥 몸이 안좋나 보다 했는데... 어리석었다.

약이라도 챙겨 먹었어야 했는데.
( @_@)y-~

일을 하고는 있는데 진도가 엄~~~청 안나가고, 아마도 잠들면 내일은 시체처럼 보낼 듯 싶다.

아.

할 일이 많은데.
너무 시기가 안좋다.
( '_')y-~

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

와~!

Refactoring + 감기 조합은 대단하다.

한 것 또하고.
할 것 안하고.
코드를 넣었다 날리고 넣었다 날리고 다시 날리고.

유후~!~!~!

( ^_^)y-~

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

넘나 아프지만 사라이씀...
~( @_@)~

2019년 4월 29일 월요일

[20190429] Sight Part.2

대기 상태가 오락가락 하는 요즘 입니다.
산책은 많이 하고 SNS는 덜하는 그런 하루 하루를 보내고 있습니다.

이번달 산책 목표치는 150km 였습니다.
초미세 먼지 수치는 좋지만 미세먼지 수치는 나쁨이던 어느날...
할당량에 압박을 느끼고 무리해서 산책을 나가봤는데 눈의 상태가 급격히 나빠지더군요.

대기질이 온전할 때만 나가기로 했습니다.
( ㅇ_ㅇ)y-~



작업 이야기를 해볼까요.
이 일지는 4월 18일, 19일, 22일 ~ 26일, 29일 까지의 작업을 대상으로 합니다.

작업 내역은...
  1. 시야 시스템 조정
  2. 시야 시스템에 맞추어 기존 기능 조정
...입니다.

이렇게 적어놓으니 무척 간단해 보이는군요.



1. 시야 시스템 조정

지난 작업에서는 시야 탐색 로직을 개선했습니다. 정확히는 Monster용 시야시스템을 개선하는 작업이었습니다.

이어서 Player의 시야 시스템을 개선하는 작업이 이어졌습니다.

사실 "Player의 시야" 라고 부르기에는 민망한 상태였는데요.
  • 시야 Stat이 없고
  • 시야의 형태가 현재 위치의 Tile 속성에 좌우되고
  • Player는 그저 시야의 기준이 될 위치를 제공하는 정도
...라서 "Player의 시야" 라기 보다는 "Game의 시야" 라는 표현이 더 어울리는 상황이었습니다.

그러다보니 관련 기능이 Player와의 특별한 접점 없이 흩어져 있었고 일을 많이 어렵게 만들었습니다.

일부 기능은 Zone AI에 가 있었고
다른 기능은 Map Shadow View에
어떤 기능은 Player AI 에
...작성 되어있더군요.

작업의 시작은 관련 기능을 모으는 작업이었습니다. 다 모았더니 시야 탐색을 담당하는 Watcher가 4개로 불어나 있었습니다.

흩어진 기능 1개당 Class 가 1개씩 늘어난거죠.

재사용성을 고려해서 중복기능을 분리해내고, 분리 자체에 의미가 있지만 재사용되지 않을 기능을 통합해서 Watcher 는 2개로 정리 되었습니다.

이 과정에서 많이 힘들었네요.
( '_')y-~

그러나 용을 썼다고 작업이 거기서 끝나줄리가 없지요.

Test Scene을 돌려놓고 생각해보니 시야가 유효한 공간만을 감지해서는 안된다는 생각에 도달했습니다.
길만 보여서는 답답하기 때문에 시야가 닿은 벽들도 찾아서 화면에 적용해줘야 한다는 것이죠.

그리하여...

< older >

< new >

이렇게 조정되었습니다.

작업 도중에...
시야의 갱신 시점 조절
같은 위치에서 재 갱신이 요청되는 경우의 효율적 처리
무리 없는 시야 갱신
자연스러운( ? ) Interface
...등을 위해 많은 시간이 들어갔습니다.

코드 한 무더기를 작성해놓고 날리기를 여러번 반복했는데 날리면서 아쉬움보다 홀가분함, 시원함이 느껴져서 다행이었네요.
( @_@)y-~



2. 시야 시스템에 맞추어 기존 기능 조정

작업 이야기 이전에 이 게임의 <환경> 이 어떻게 표현되는지에 대해서 약간의 설명을 해볼까 합니다.

<환경>은 지형, 안개, 시야로 표현됩니다.

각각의 요소는 다음과 같이...

< 지형 >

< 안개 - 일명 "전장의 안개" >

< 시야 >

개별적으로 Texture에 그려집니다.

이걸 가져다가
지형에 Gray Scale을 적용하고
Fog를 덮어 씌우고
시야의 색상을 뒤집어서 떠내면


...이런 결과물이 되는 것입니다.

작업은 시야 시스템을 적용하는 것으로 시작했습니다.
이전의 동그랗고 네모나던 시야를 TileMap 기반으로 바꿔야 했습니다.

<지형> 이나 <안개> 도 TileMap 기반이지만 <시야>에 적용하기에는 적절하지 않더군요.

<지형> 은 TileMap 이 가득 차있고 양적인 부분에서 변화가 없습니다.
<안개> 는 가득 채워져 있다가 게임이 진행됨에 따라 비워집니다.
<시야>는 비워져 있다가 시야에 해당하는 부분만 채워야 낭비 없는 작동이 가능합니다.

<지형> 이나 <안개> 에 쓰이던 기능을 그대로 사용해도 문제는 없지만 효율성을 고려해서 <시야> 를 위한 기능을 별도로 작성했습니다.

작업 도중에 기존의 Light Node를 대신할 Erase Node를 추가했습니다.
이 녀석은 시야 영역을 떠내는 역활을 잘 수행하고 있습니다.

두번째 작업은 안개를 지워내는 기능의 조정이었습니다.
이전에는 그저 네모나게 지워낼 뿐이던 것을  시야의 모양에 맞추어 지우도록 조정했습니다.

그 외에 Interface 조정이나 Test Scene 작업등 여러 재미없는 것들을 정리하며 작업이 마무리 되었습니다.

지금 Game의 모습은...


...이런 상황 입니다.

시야 표현용 Tileset 조정 작업을 진행해야 하지만 조금 지쳐서 미뤄 둡니다.
@_@

일지는 여기까지 입니다.



상당히 긴 기간을 이 작업에 몰빵했는데 작업 내역을 확인해보니 100개도 되지 않습니다.
전 도대체 얼마나 많은 코드를 저 멀리로 날려버린 걸까요. @_@

Game의 모양이 어느정도 잡힌 것 같아서 기쁘기도 하고, 홀가분 하기도 합니다.

이전의 시야 시스템이 전해주던 안정감( ? )이 사라진 것은 아쉽지만, 전략적 움직임의 유도와 긴장감의 전달이라는 목표는  달성한 것 같습니다.
늘 그렇듯이 얻는게 있으면 잃는게 있는거겠죠.

작업들이 많이 밀려 있지만 앞으로 한 달은 BIC용 Build를 준비하게 될 겁니다.
"완성된 Intro" 와 "던전 한 Set"가 목표인데 어찌 될런지...


다음 일지는 좀 더 이른 시기에 작성 하겠습니다.
환절기 건강 관리들 잘 하시고.
다음 일지에서 만나요.
( '_')y-~

> 3번 고침

2019년 4월 26일 금요일

[20190426] 잡설 - 평소의 나

하루의 작업을 마무리 하고 쉬던중

다음 작업의 진행 방향을 생각해내고 몸이 달아 있다가

자고 일어나서 일부 기능을 작성

외출 했다가 돌아와서 기반 기능을 다시 둘러본 다음

작업했던 것 몽땅 날리고 간단하게 구현
.
.
.

평소의 나로군.
( '_')y-~

2019년 4월 22일 월요일

[20190422] 5000+

5000+


굴러 굴러 여기까지 왔다.

아직도 할 일은 어마 무시하게 남아 있고, 마지막 까지 갈 수 있을지 여전히 확신하지 못하지만...

어쩌나.

계속 가는 것 말고는 선택 할 것이 없다.
그저 앞으로 전진할 따름이다.

( '_')y-~

2019년 4월 17일 수요일

[20190417] Sight Part.1

좋은 날씨가 계속되고 있습니다.
대기가 안좋은 날 조차 초미세먼지는 적어서 만족스럽네요.

몸상태는 좋지 않습니다.
역시나 잠을 편히 못자는게 문제입니다.
늦게 자고 정오 다 되어서 일어나고 있었는데요.
해뜨는 시간이 앞당겨짐에 따라서... 빛에 민감한 저는 안좋은 쪽으로 영향을 받고 있는 것이죠.

작업시간 조정과 함께 수면 시간 조정도 해야 합니다.
불행히도 성공한 적은 그닥 없죠. ㅇ_ㅇ



작업 이야기 입니다.
이 일지는 2019년 4월 11일, 12일, 15일 ~ 17일 까지의 작업을 대상으로 합니다.

작업 내역은...
Fog 시스템 갱신
시야 시스템 조정
...입니다.


1.Fog 시스템 갱신

이어온 작업들을 통해서 맵이 울퉁 불퉁( ? ) 해졌습니다.

거기에 맞추어 흔히 <전장의 안개> 라고 불리는 기능을 조정했습니다.


네모나게 만 갱신되었던 방안의 안개 타일들이 방의 모양에 맞게 조정됩니다.

시야 시스템이 조정되면 한번 더 작업해야 하지만 길을 닦아두는 과정입니다.


2. 시야 시스템 조정

잡설에 적었던 <어려운 게임이 가져야 하는 공정성> 을 위한 작업입니다.

의문사가 발생할 가능성이 있는 게임은 죽음에 이르는 과정이 유저에게 납득가능하게 전달 되어야 한다고 생각합니다.

그래야 비슷한 상황에 다시 처했을 때 대처가 가능하겠죠.
그 것이 <재시작> 뿐이라도 말입니다.

시야는 일찌감치 Statistics 의 하나로서 포함되어 있습니다.


몬스터들은 위와 같이 시야 값을 가지고 그것을 기반으로 행위의 대상을 찾습니다.

플레이어는 이것을 사용하지 않고 <고정> 시야를 사용해왔습니다.


위 처럼 말이죠.
가급적 고정 시야로 게임을 마무리 하고 싶었지만... 네... 계획은 깨지는 것이 일반적이죠.
이제 플레이어도 몬스터와 같은 시야 시스템을 사용합니다.

시야 시스템은 내부적으로 Dir, Cost 값을 포함하는 Data Map 을 사용합니다.
매우 정적인 녀석입니다.
그런 녀석은 돌려 쓰는 것이 가능하죠. 그래서 돌려쓰도록 작업했습니다.

Research Scene을 추가했고, 이런 저런 Test를 해서 Bug도 찾았고, 잡았습니다.


탐색 로직이 Debug Mode 에서 느린감이 있어서 손을 볼지 고민중입니다.
할게 너무 많아서 손대기가 망설여지네요. ( o_o)a
일단 BIC 이후로 미뤄둡니다.



이번 일지는 여기까지 입니다.

작업 시간이 짧다보니 진행이 더디네요.
일어나는 시간을 당겨서 작업시간을 늘려보려고 합니다.

벚꽃 구경 시즌이 끝나갑니다.
다들 충분히 즐기셨으면 좋겠네요.
( '_')y-~

2019년 4월 16일 화요일

[20190416] 잡설 - 간단한 영단어 한글로 바꾸기

외국사람 트친에게...
간단한 영어 단어들을 한국어로 바꿔줄 수 있느냐
...고 요청받았다.

영어 잼병이지만 "20 KR Words" 정도는 어떻게든 해줄 수 있을 것 같았다.
그래서 아래와 같이 작업해서 보내줬다.


Text to be translated 
1. New Game
 - 새 게임

2. Options
 - 설정

3. Easy, medium, hard, nightmare
 - 쉬움
 - 보통
 - 어려움
 - 악몽

4. Loading…
 - 로딩중...( is Koreanized English )

5. Resume
 - 계속하기

6. Main menu
 - 주 메뉴( is a near translation )( menu = 메뉴 is Koreanized English )
 - 타이틀 화면으로( if you want to move to title scene )

7. Restart
 - 재시작

8. Level completed
 - 레벨 완료( is a near translation )( level = 레벨 is Koreanized English )
 - 임무( level > mission ) 완료
 - 스테이지( level > stage ) 완료
 > "Level" is not used well from korea. usually used in Character LV.

9. Enemies Killed
 - 적을 처치했다.
 - 적 처치!( strongly )

10. Bullets Fired
 - 총알 발사

11. Accuracy
 - 명중률

12. Continue to Next Level
 - 다음 단계 계속하기( is a near translation )
 - 다음 임무( level > mission ) 계속하기
 - 다음 스테이지( level > stage ) 계속하기


이 간단한 것이 1시간 가량 걸렸다.
( o_o)y-~

저 게임 한국어 엉망이라고 욕먹으면 내 탓이겠지?
옘병... ( T_T)y-~



> 첫 게임을 출시하기 얼마전 페친에게 영어 번역을 부탁했었다.
> 문자가 몇 개 나오지 않는 게임이었음에도 내 경험없음이 페친에게 번역상의 불편함을 줬었다.
> <맥락> 을 전달해주지 못했기 때문이다.

> 위의 작업을 하면서 나 역시 비슷한 경험을 했다.
> 그래서 스팀페이지에가서 게임 영상을 돌려보고, 트친의 타임라인에 올라온 게임 이미지와 영상들도 찾아봤다.
> 어디에 쓰였는지 아는 것 만으로 막연한 불안감이 사라지더라.

> 어중간한 녀석은 다른 게임에서 쓰인 것을 참고했다.
> "타이틀 화면으로" 같은 녀석들이 여기 해당한다.

> 4번 고침

[20190416] 세월호 5주기

Memorialize the victims of 세월호( sewolho ) accident.

지난해 오늘 내년에는 추모에만 마음을 다할 수 있기를 바랐다.

아직도 해결된 것이 없다.
( '_')y-~


2019년 4월 15일 월요일

[20190415] 잡설 - 공정성

어려운 게임을 만들면 공정성( ? )에 많은 신경을 써야 한다.

그리하여...
Monster에만 적용했던 시야 탐색 기능을 Player 에도 적용해야 한다.

물론...
관련해서 많은 것들을 갈아 엎어야 하겠지.

Visit정보 갱신
Sight 정보 갱신
Fog View
Sight View
.
.
.

음.
그냥 그렇다고.

( T_T)y-~

< Game layout >

개발 시작할 적 만든 컨셉의 시야 시스템에 가까워질 것 같다.

2019년 4월 11일 목요일

[20190411] Render 2 Texture Manager

날이 좋습니다.
몹시 너무 완벽하게 좋네요.
덕분에 거의 매일 산책을 가고 있습니다.
언제 미세먼지의 역습이 시작될지 모를일이니 지금 부지런히 다녀둘랍니다.
( '_')y-~



작업 이야기로 들어갑니다.
이 일지는 4월 3일 ~ 5일, 8일 ~ 10일 작업을 대상으로 합니다.

작업 내역은...
  1. 장비 내구도를 Stat 으로 전환
  2. 장비 파괴 Log 출력
  3. Render to Texture Manager 추가
...입니다.


1. 장비 내구도를 Stat 으로 전환

지난 일지에 <장비 내구도> 를 작업했다고 남겼었죠. 이 녀석은 Stat으로 넣기에는 어중간해서 고민 끝에 별도의 요소로 작업했었습니다.

작업을 마친 다음날 고민을 해봤습니다.

'속성이 추가되면 멤버변수를 하나씩 늘려나갈건가?'
'추가된 속성을 table에서 읽을껀데 매번 parsing 코드 작성할거야?"
'1인 개발이잖아. 번거로운 일을 최대한 줄이는 것이 맞는 방향 아니야?"

이런 고민 끝에...
Statistics Type 에 Durability 를 추가해서 <장비 내구도> 에 활용하고
각각의 Statistics Type에 속성을 부여해서 제약을 거는 것으로 관련 기능을 정리했습니다.

속성에 대한 설명을 약간 해보자면...

기존의 Statistics 관리 기능은 Item을 장비하면 해당 Item이 가진 Statistics List를 장비한 Actor의 Statistics Manager에 넘겨 줍니다. 그러면 Item이 넘겨준 Stat이 Actor의 Stat 에 합산되어 사용되는 구조입니다.

하지만 아이템의 <내구도> 는 그런식으로 작동해서는 안되겠죠.
Actor에는 <내구도>가 없을뿐만 아니라 있더라도 Item의 <내구도> 와 Actor의 <내구도> 는 서로 영향을 줘선 안됩니다.

그리하여 Stat에 <관계> 속성을 추가했고, 이 속성이 <고립> 이라면 Manager 에서 사용되지 않도록 작업했습니다.

덤으로...


UI 문제도 해결되었습니다. Icon 작업은 해야겠지만요. ( +_+)y-~



2. 장비 파괴 Log 출력

내구도 소모로 Item이 파괴되면 Event Log 를 출력합니다.


그렇습니다.



3. Render to Texture Manager 추가

이 일지가 6일간의 작업을 대상으로 하는데 그중에 5일이 이 작업에 투입되었습니다.

특정 시점부터 cocos2d-x 엔진은 3D 기능과 cocos creator에 집중하고 있습니다.
덕분에 기본적인 기능의 개선이 부실합니다.
( 그래도 Sprite::setTexture 함수 쓰면 Shader 초기화 하는 이상한 코드는 고쳐놨더군요. )

이 작업은 개선되지 않고 방치되는 것들 중에 Render to Texture 기능의 맘편한 사용을 위한 작업입니다.

cocos2d-x는 RenderTexture 라는 특수한 Node를 제공합니다.
이 녀석은 자식 Node로 추가된 Node들을 Texture로 뽑아줍니다.

어째서 이걸 Node로 만들어 뒀는지가 우선 이해할 수 없고, Render를 위한 Camera 세팅은 왜 이리도 거지 같은지 또한 이해할 수 없는 부분이지만... 엔진 까는게 목표는 아니니까 넘어가겠습니다.

추가된 Render to Texture Manager는 다음과 같은 이점을 제공합니다.
  1. 부모 Node없는 Node도 Render 가능
  2. 뽑혀나온 Texture는 위아래가 뒤집혀 있는데 이것을 미리 뒤집어서 Render
  3. Render Command를 수집하는 과정에 들어가기 이전에 작업을 마치기 때문에 RenderTexture 기능이 Node로 제공됨에 따라 발생하는 우선순위 문제 해결.
  4. 위와 같은 이유로 Render 대상에 이런 저런 양념이 가능
  5. 편리함.
...등 입니다.

Manager를 만드는 과정에서 이전에 RenderTexture Node를 사용한 곳들은 모두 대체되었습니다.

이렇게 같은 View를....


...여러 곳에 쓰는 것도 편해졌죠.

이 작업하면서 여러 이상한 것들을 발견했고... 녀석들은 여러모로 방해가 되었는데요.

그러다보니 이렇게 오래 걸릴 작업이 아니었는데도... 자신을 믿지 못한 어리석음에... 엔진에 대한 불신이 겹쳐서 일을 어렵게 만들어 버렸네요.
( o_o)y-~

코딩 시작한지 19년째인데도 이러는 것을 보면 단련할 부분이 아직도 너무나 많다는 생각이 듭니다.

Code를 정리해서 git에 올릴까 생각했는데... 최종적으로 어쩔지는 모르겠습니다.
전 사람들이 이 엔진( ? ) 안썼으면 좋겠거든요.



일지는 여기까지 입니다.

일지를 쓴다는 것은 참 좋습니다.
제가 한 일이 어떤 의미인지, 작업하면서 깨닫지 못한 것이 쓰다보면 알게되거든요.
이 너절한 일지가 개발을 시작하는 사람들에게 그런 도움을 주면 좋겠습니다.

그럼 저는 작업하러 갑니다.
( '_')y-~

> 8번 고침

2019년 4월 2일 화요일

[20190402] Equipment Durability

날씨도 좋고 대기 역시 좋은 날이 이어지고 있습니다.
계속 이랬으면 좋겠네요.
( '_')y-~



작업 이야기를 해볼까요.
이 일지는 2019년 4월 1일 ~ 2일 의 작업을 대상으로 합니다.
오랜만의 작업, 오랜만의 일지군요. ( '_')y-~

작업 내역은
  1. 장비 내구도
  2. 능력치 아이콘 조정
...입니다.


1. 장비 내구도

대단치는 않지만 유저의 체험에는 많은 변화를 줄 작업입니다.

<어떤 방법으로 게임을 어렵게 만들 것인가?> 라는 고민에 대한 첫번째 대응책입니다.
어려운 게임을 만들기로 했기 때문에 거리낄 것도 없이 결정했습니다.

아주 오래전에 결정 했는데 작업 시작까지 오래 걸렸네요.


내구도가 있고, 장비가 사용되면 감소하고, 부숴집니다.
간단한 기능입니다.

영상에 보면...
무기로 하는 마지막 공격의 데미지가 온전히 반영되지 않는 것을 볼 수 있습니다.
작업 마무리 하기 전에 영상을 먼저 찍은 덕분이죠.
일지에 어지간하면 최종버전을 올리지 않는데요.
그 연장선으로 봐주시면 됩니다.( @_@)y-~

이후에 내구도 소모로 장비가 완전히 사라지는지, 사용은 못하지만 남아 있을지... 따위의 선택이 남아 있습니다.
이건 두고 보면서 선택하면 되겠죠.


2. 능력치 아이콘 조정

1번 작업에서 추가된 <내구도> 를 어딘가에는 보여줘야 합니다.

어디 쑤셔넣을지 이리 저리 살피다보니 능력치 아이콘이 맘에 안들더군요.
간단한 작업이라 해봤습니다.


최근 몇달간 Dot로 찍은 Icon이나 Item을 무지막지하게 찾아보고 있었는데 거기서 도움을 받은 것 같습니다.

엄청 후져 보이더라구요. ( @_@)y-~


일지는 여기 까지 입니다.
이어서 간단하게 내구도 UI 를 만들 것 같네요.




눈에 보이는 작업량은 얼마 안됩니다.
어제도 오늘도 무언가를 만들어내기 보다는 고민하는 시간이 많네요.
아마도 이게 정상적인 개발일거라 생각합니다.

5시간도 일하지 않았지만, 오늘 작업은 여기까집니다.

산책을 떠납니다.
다들 좋은 하루 되시길.
( '_')y-~

2019년 4월 1일 월요일

[20190401] 다시 시작

휴식은 끝입니다.
손목은 여전히 불안 하지만 계속 쉬고 있을수도 없는 일이라 작업을 시작했습니다.

잠이 안와서 2시간쯤 선잠을 자고 일어났지만 뭐 별 수 있나요.
오전 8시부터...
  • 4시간 작업
  • 2시간 산책
  • 오랜만에 밥과 반찬을 만들고
  • 2.5시간 작업
...하는 것으로 하루를 보냈습니다.

머리가 잘 돌아가지는 않네요.
며칠은 이런 상태로 보낼겁니다.
예열 시간 같은거죠. @_@

그래도 오늘 목표로 했던 작업은 무사히 마무리 했답니다.

( '_')y-~