댓글기능 활성화 해놓았음.


SiegeMode!


  1. RTS

  2. 공성전

  3. 모바일

  4. 유닛 생산요소를 넣을 것인가

  5. 자원 요소를 넣을 것인가

  6. 조작은 어떻게?



일단 부대단위 전투로 해보자. (토탈워의 부대단위 유닛이나, 워해머4K 던오브워의 분대단위 유닛처럼)


이런 느낌이 될 것이다. (한 묶음이 하나의 유닛)



그리고 일단 사이드뷰로 정하자. (던파 느낌의. 2방향 스프라이트밖에 없지만 위아래 이동은 가능한.)


일단은 서버 없이 클라이언트만 생각하자.


왜 싸우는가? - 적의 성을 함락시키기 위해 or 성을 지켜내기 위해


성을 함락시키다(혹은 지켜내다)의 조건은 무엇일까?

  • 하나의 특정 오브젝트를 지켜낸다.

    • 성 안에 공주가 있다?

    • 왕을 죽 여야 한다?

    • 성 안에 성소가 있다?

  • 몰살 조건

    • 성 안의 모든 사람을 죽인다.

    • 성 안의 모든 건물을 파괴한다.

  • 기타 조건

    • 성 가장 안쪽에 왕의 타워가 있고, 왕의 스트레스 수치가 너무 높아지면 왕이 성에서 뛰어내려 자살한다.(미나스티리스)

  • 점령느낌

    • 성의 가장 안쪽에 나의 깃발을 게양한다.

    • 성의 특별 장소에서 특정 시간 이상 버티면 점령한다.

  • 부족전쟁 느낌

    • 일반 병력으로는 상대의 병력을 무력화 할 수 있지만, 점령은 못한다.

    • 귀족으로 공격하면 상대 성의 충성도가 낮아진다.(귀족의 스탯은 낮음)



자원으로서의 민간인, 적으로서의 민간인


  • 민간인 학살은 공격측에게 쾌감을 제공하는가?

  • 민간인을 지켜야 하는 소중한 대상으로 설정하는 것을 방어측의 동기부여, 자원 개념으로 사용할 수 있는가?



확정 사항만 다시 적어보자.

(1차 목표 버전의 기획)


  1. 건물을 마음대로 짓고, 배치할 수 있다.

    1. 해자(공격측에서는 흙으로 메울 수도 있다.)

    2. 성벽(공격 측에서는 사다리로 타고 오를 수 있다.)

    3. 성문(부술 수 있다.)

    4. 건물에 층 개념은 없다.

    5. 화살 타워(화살을 발사한다.)

  2. 유닛을 실시간으로 조작할 수 있다.

    1. 유닛을 클릭해서 선택, 목표 대상을 클릭해서 액션을 기본 조작법으로 한다.

    2. 하나의 유닛은 한 분대 규모를 기본으로 한다.
      (토탈워, 워해머4K 던오브워와 같다.)

    3. 네 방향 모두 움직일 수 있지만, 스프라이트는 양옆 스프라이트만 사용한다.

  3. 카메라를 실시간으로 조작할 수 있다.

    1. 뷰는 isometric(탑뷰)

    2. 드래그 해서 화면 슬라이드, 두 손가락으로 줌인, 줌아웃이 가능하다.

  4. 전투는 실시간을 기본으로 한다.

    1. /*공격 목표를 향해 걸어가다가, 공격은 유행하는(사실 내가 좋아하는) 통통이 느낌의 전투로 한다.


    2. ㄴ 통통이 느낌.

    3. https://youtu.be/dcIIMd4e0qQ
      ㄴ 이것도 통통이 느낌*/

    4. 통통이는 일단 보류하고, 평범한 RTS 스타일의 전투 버전으로 만든 후에 생각한다.

  5. 일단은 AI나 네트워크 대전은 생각하지 말고 플레이 가능한 버전을 만든다.

  6. 유닛 스탯

    1. 체력

    2. 공격력

    3. 이동 속도

    4. 사정거리

    5. 공격 속도

    6. 방어력은 없다

  7. 1차로 만들 유닛과 건물

    1. 건물

      1. 그냥 성벽(유닛이 올라갈 수 있다.)

      2. 성문(파괴 가능. 열면 유닛이 지나갈 수 있다.)

      3. 화살 타워(화살을 쏜다)

    2. 유닛

      1. 투창병

        1. 이동속도가 빠르고 체력이 적다.

        2. 투창 3~4자루를 소지하고 있으며, 선두에서 가지고 있는 투창을 다 던진 후 중보병들에게 자리를 내어주고 뒤로 빠진다.

        3. 전열 뒤에 투창을 재충전 할 수 있는 방법을 만들어 둔다.

      2. 중보병

        1. 스쿠툼(로마방패)과 글라디우스(로마단검)를 들고 싸운다.

        2. 필룸(대형 투창)을 한 발 장착할 수 있다.

      3. 궁병

        1. 화살을 쏜다.

      4. 발리스타

        1. 설치해야 공격 가능. 궁병보다 사거리가 길고 강력하다.

        2. 아주 천천히 이동할 수 있다.

      5. 사다리

        1. 성벽을 오르는 데에 사용한다.

  8. 나중에 만들 유닛과 건물

    1. 공성탑

    2. 충차(ram)






목표로 할 버전의 기능

  1. 전투 시작 전 준비 기능

    1. 건물을 짓는다.

    2. 유닛을 배치한다.

  2. 전투 기능

    1. 실시간으로 유닛들을 컨트롤해서 전투를 수행한다.




으 너무 졸려서… 마무리는 내일로 미뤄야 겠다.(스스로 정한 일정인데도 하루 밀리긴 하지만..)


내일 일어나자마자 우선적으로 정해야 할 것 - 시점을 iso로 할 것인지, sideview로 할 것인지 정해야 한다. 단순 4방향 top-view로는 건물과 사람이 섞여있기 힘들다.

만약 iso로 한다고 하더라도 건물 뒤에 가려진 사람은 어떻게 할 것인가??

이 문제는 내일 stronghold를 구매해서 플레이해봐야겠다.


ㄴ stronghold의 플레이 스크린샷. 화면 뒤에 가리는 병사들의 조작은 어떻게 하는지 내일 사서 플레이해볼 예정



Posted by RPG만들기XP
,

일단 되는대로 막 짜려고 시도하니 몇 가지 문제가 발생했다. (개인 프로젝트 진행할 때마다 똑같이 발생하는 일들이지만 이번에도..)

교수님 말씀대로 혼자 하더라도 계획을 치밀하게 짜서 진행해야 한다는 것을 뼈저리게 느끼는 중이다.


문제는 - 


  1. 확정된 뚜렷한 기획이 없다.
    • 기획이 없고 머릿속에 대충의 이미지만 있으니 정확히 뭘 개발해야 할지 명확하지 않다.
    • 그래서 방향이 왔다리 갔다리 한다.
  2. 일정면에서의 계획이 전혀 없다.
    • 조급하게 코드부터 손대려고 하지 말고, 팀프로젝트 할 때처럼 대략의 마일스톤 및 다가올 주차의 세부 이슈를 구체화해서 정리한다.
    • 조급하게 코드부터 손대려고 하다가 지금 1주일이 넘었는데 별 결과물이 나오지 않고 갈팡질팡 하고 있다.


그래서 당장 해야할 것은 - 

  1. 결과물에 대한 기획을 디테일한 부분까지 딱 정한다.(중간에 기획이 바뀔지라도)
  2. 기획을 바탕으로 구현해야 할 기능 명세를 뽑아낸다.
  3. 주차별로 어느 부분을 구현할지 대략적인 마일스톤을 잡는다.
  4. 적어도 해당 주차에 들어가기 전까지는 그 주차에 정확히 어떤 기능을 구현할 지 이슈로 잘게 쪼개놓는다.

기한을 정해두지 않으면 안하니까 기한을 정해두자.

  • 기획 끝내기 - 화요일 자정까지.
  • 기능, 전체 구조 설계 + 첫주차 이슈 쪼개기 -  목요일 자정까지.
  • 그 다음부터는 매주 목요일 자정까지가 기한인 주 단위 마일스톤을 진행.

아자!!

깃허브 이슈트래커는 팀 프로젝트 할 때는 좋았는데, 혼자 할 때는 아무래도 깃허브 사이트를 들어갈 일도 없고 해서 자꾸 손을 떼게 된다.

혼자 프로젝트 할 때 이슈트래킹 하기에 접근성 좋고 편리한 게 뭐가 있을까... 역시 포스트잇이 답인가..

Posted by RPG만들기XP
,

이전글의 1번 선택지를 선택했다.


결과는 - 


예쁘게 나오긴 한다.


다음은 소스.





'개발일지 > SiegeMode!' 카테고리의 다른 글

C++ 공부를 위해 하는 프로젝트이다.  (0) 2016.04.08
1차 기획 과정  (0) 2016.04.08
계획을 세우자  (0) 2016.04.04
문제발생 - cocos2d-x 스프라이트 외곽선 넣기  (0) 2016.03.31
새로운 게임!  (0) 2016.03.24
Posted by RPG만들기XP
,

별 것도 아니고...

유닛 선택시 스프라이트 주위에 초록색 stroke를 넣고 싶었다.



요렇게... 하고 싶었는데..ㅠㅠ


여러 방법을 시도하다가 지금 시도하고 있는 방법의 기본 아이디어는


 원본 이미지를 복사해서

요렇게 변환한 다음에

원본 이미지 뒤 주변으로 네 장 깔아놓는 것이다.

하지만 어쩌구 저쩌구 문제로 인해서 한 10시간을 날려먹었는데도 구현하지 못하고 있다.


현재 당장 해결 가능한 방법은

  1. 이미지를 직접 픽셀단위로 읽어서 alpha를 제외한 r,g,b를 내가 원하는 색으로 채워준다.

    • 이미지를 픽셀단위로 읽어오려면 TexturePacker를 써서 기껏 만들어놓은 SpriteSheet를 쓰지 못하고, 쌩자 이미지 파일에서 매번 로딩해야 한다.

  2. 모든 애니메이션 프레임마다 초록색 이미지를 한장씩 준비한다.

    • 모든 애니메이션 프레임마다 초록색 이미지를 한장씩 준비하거나 selected,unselected 버전 이미지를 따로 준비하는 무식한 방법인데, 자존심이 허락 안함.




돌겠다..


'개발일지 > SiegeMode!' 카테고리의 다른 글

C++ 공부를 위해 하는 프로젝트이다.  (0) 2016.04.08
1차 기획 과정  (0) 2016.04.08
계획을 세우자  (0) 2016.04.04
문제해결 - cocos2d-x 스프라이트 외곽선 넣기  (0) 2016.04.04
새로운 게임!  (0) 2016.03.24
Posted by RPG만들기XP
,

제목은 [SiegeMode!]

조금 와꾸가 잡히면 공개..

Posted by RPG만들기XP
,

멀티스레드로 굳이 만들지 않아도 조금조금씩(1프레임 내에 처리 가능한 만큼) 로딩하면 가능할 것 같다.

하지만 당분간은 하고 싶은 다른 프로젝트가 생겨서... 보류!

Posted by RPG만들기XP
,



당연히 안된다.


혹시나 하고 기대했지만.. 역시나...


스레드로 돌려달라고 친절하게 요청했지만 cocos2d-x가 보여주는 결과물은 이전 포스트의 결과물과 똑같다... 리소스 로딩할때 프레임 스탑...ㅜㅜ

(참고로 MapManager::reload() 내부에서 cocos2d::TMXTiledMap::create()를 호출한다.)


앞이 모두 막힌 현 상황에서 너무 힘들다. 모두 내 공부가 부족한 탓이겠지만...


원래의 목적이었던 2d seamless를 포기하고 평범한 rpg를 만드느냐, 계속 하느냐 고민이다.


정확히 뭘 공부해서 어느 부분을 어떻게 바꿔야지 계획이라도 보인다면 힘들어도 그대로 할텐데,

어떻게 짜야할 지 아예 감이 안온다.

보류해놓고 책 읽고 공부나 해야되나...


Posted by RPG만들기XP
,

https://github.com/seokmin/2d_map/tree/v0.1_refactoring


더러운 줄줄이 반복 코드가 너무 많아서 "아 이게 바로 고수님들이 말씀하시던 리팩토링을 해야 하는 순간인가" 하고는 리팩토링을 시도하였다.


안 된다.


분명 깔끔하게 해결할 수 있을 것 같은 부분이 엄청 많은데 안된다.


ㅠㅠ

Posted by RPG만들기XP
,


깃허브 링크 - https://github.com/seokmin/2d_map/tree/v0.1

*사실 아무도 안봤으면 좋겠다. 더럽고 더럽고 더럽고 더럽고 더럽고 더러운 코드들... 더러운 코드들... 더티 코드 베리베리 더티 코드즈...



맵을 n*m칸으로 쪼개어 저장해놓으면, 바둑판 모양으로 그래프를 쭈욱 그려서 메모리상에는 항상 캐릭터가 위치한 zone을 중심으로 한 9개의 맵만 띄워놓는다.

일단은 캐릭터가 속해있는 맵의 경계선을 지날 때 가려는 방향의 맵을 새로 메모리에 올리고, 지나온 방향의 맵을 메모리에서 내린다.

만약에 전체 맵(n*m개의 zone을 전부 붙여놓은)의 경계선을 지난다면, 전체 맵을 순환하게 해놓았다.(지구는 둥그니까)

아직 타일 이미지만 화면에 띄우는 것이라 엄청 간단한 일이고, 맵에 딸린 이벤트, NPC, 각종 오브젝트들까지 이 방법으로 구현하려면 멀고도 험한 길이 될 것 같다.

하지만 일단 목표로 했던 "타일 이미지라도 오픈월드로 돌아다닐 수 있게 만들자!"는 달성했다.


그런데... 만들다보니 엄청난 벽에 느닷없이 부딪혀 버렸는데..

영상에서 보다시피 로딩할 때 걸리는 시간때문에 zone을 넘어다닐 때 게임이 멈춰버린다.

이러면 눈으로 보기에만 seamless이지 사실은 게임에 전혀 써먹을 수도 없고, 일랜시아, 바람의나라같은 흔한 맵 시스템과 다를 것이 없다.

따라서 맵을 메모리에 올리고 내리는 과정을 백그라운드에서 진행해야 매끄럽게 돌아갈텐데, cocos2d-x가 백그라운드 리소스 로딩을 지원하지 않는 것으로 알고 있어서 엄청난 멘붕에 빠져버렸다.

어찌어찌 해서 MapManager 로직을 따로 빼서 멀티스레드로 돌린다고 하더라도, 로직을 분리해봤자 리소스를 로드하고 그려주는 cocos2d-x가 싱글스레드로 동작하는 이상 해결 방도가 없다는 것..

방법은

1. cocos2d-x를 뜯는다.

2. 엔진을 만든다.

3. 포기한다.


3번은 절대 싫다.

1번은 내 실력이 미천해서 어렵고 힘들고 엄청난 시간과 노력을 요하는 과정일 것 같다.

2번은 내 실력이 미천해서 어렵고 힘들고 어렵고 힘들고 어렵고 힘들고 불가능한 과정일 것 같다.


일단 구글링(...)을 비롯해 여러 곳에서 해결 가능한 방법이 있는지를 알아보고, 정 해결 방법이 없다고 한다면 고민을 많이 해봐야 할 것 같다.

Posted by RPG만들기XP
,

동적으로 TMXTiledMap::create()를 하면 화면에 리소스를 띄우는 데 까지 수십초 이상 소요되는 문제가 있었다.

디버그모드에서만 발생하는 문제라서 한참을 고민하고 불편해했었는데, '혹시?!'하는 생각에 코드 한 줄 수정했더니 아주 빠르게 잘 돌아간다.

문제는 VLD(Visual Leak Detector)때문이었다.

VLD가 new, delete할 때마다 개입해서 하는 짓이 많다보니, 잦은 new(100*100칸의 tileset이라면 1만번~최대 수만번의 new가 발생할 것)때문에 그렇지 않았나 싶다.

결국 TMXTiledMap을 이용하는 프로젝트에서는 게임이 돌아가는 화면을 제대로 보려면 디버그시 VLD를 꺼야만 한다.

그러면 내 미천한 실력으로 인해 줄줄 새어나가는 메모리는 누가 봐주지..

Posted by RPG만들기XP
,