기획자 본인만큼 잡다한 블로그

greentec.egloos.com

포토로그




로그라이크 게임 제작 - 미니맵 프로그래밍

게임 시스템으로 깊이 들어가기 전에 주변부를 조금 더 정리해보기로 했다.
일단 조명. 조명이 너무 어두운 느낌이 들어서 조금 밝히기로 했다. 방법은 간단한데 이 부분을 고쳐주면 된다.


color = ((lightSourceDistance - fogAlpha) / (lightSourceDistance + 1 + 2) * 255) << 24; //+1 for visited place, +2 for light intensity



위 부분에서 분모의 lightSourceDistance 뒤에 +2를 붙여준 것이다. 여기서 계산되는 값은 <<24, 즉 곱하기 2의 24승을 해서 alpha 값으로 쓰이고 있다. 분모를 크게 한다는 것은 값을 작게 한다는 것을 뜻한다. 즉 더 투명해지는 것이고, 조명이 더 밝아지는 효과가 나게 된다.



원래 이미지




분모에 +2 해준 이미지. 위와 비교하면 확실히 더 밝아졌다.



그리고 새롭게 미니맵을 구현해 보기로 했다.

여기서 먼저 이 게임의 미니맵에 대해 정의를 내려보면,
1. 미니맵은 전체 상황을 파악하는 용도가 아니라, 내 주변의 상황을 현재 맵보다 조금 더 잘 파악할 수 있게 해주는 용도이다.
2. 미니맵과 현재 시야는 동일하게 적용. 즉 나중에 아이템이나 적이 나타났을 때에도 그 상황을 내가 아는 것보다 더 잘 나타내주지는 않는다.

이 두 가지 목적에 맞는 미니맵을 구현하기 위해 일단 사이즈는 현재 게임에서 보이는 정도의 가로 세로 1.5배, 즉 계산하면 (21*21) / (15*15) = 1.96배 정도의 주변 상황을 확인할 수 있도록 했다.






일단 1차로 구현해 본 결과는 다음과 같다.




우상단에 있는 것이 바로 미니맵이다. 간략하게 캐릭터와 벽, 바닥만 표현했다. 움직일 때마다 미니맵을 다시 그려주는 처리도 되어 있고, 나름 잘 동작한다.
하지만 뭔가 빠져있다. 뭐가 빠졌을까? 현재 보이지 않는 부분도 미니맵에는 맵핵을 쓴 것처럼 환하게 다 보인다는 게 문제다. 해결책은 미니맵에도 안개를 씌우는 것이다.

미니맵에 사용되는 안개는 아직 보이지 않는 부분을 가려주는 용도로 쓰인다. 따라서 알파값은 당연히 0이어야 하고, 보이는 부분은 지우고, 안보이는 부분은 가려주는 식으로 단순하게 그리면 된다.




차이가 느껴지는가? 이렇게 미니맵에 안개까지 씌워서 완성했다. 다음에는 아이템과 몬스터 랜덤 생성을 먼저 할지, 스탯 개념을 잡아볼지 고민중이다.


역시 이번 소스도 wonderfl에 올려놓았다.




덧글

  • 뉴런티어 2015/08/19 00:03 # 답글

    스탯 개념을 먼저 잡는 게 좋을 것 같아요. 캐릭터의 능력이 게임월드의 어디까지 개입되는지 확립해야 확률 테이블과 적 테이블을 만들 수 있으니까요. 적 랜덤 생성이 애로사항이 많다는 것 때문이기도 하고(...)
  • 기획자 2015/08/19 00:30 #

    오.. 그렇군요. 그럼 스탯부터 잡아봐야겠네요! 역시 기본이 튼튼해야 좋은 작업물이 나오겠네요. 좋은 의견주셔서 감사합니다!
댓글 입력 영역

애드센스