안녕하세요. 나위입니다.
프로젝트 '나, 물림.'의 개발 일지를 계속 이어갑니다.
이전 포스팅은 아래 링크를 참고해 주세요!
- 나, 물림 프로젝트 소개 : [바로 가기]
- 나, 물림 배경 스토리 소개 : [바로 가기]
- 나, 물림 개발 일지 #000 : [바로 가기]
- 나, 물림 개발 일지 #001 : [바로 가기]
- 나, 물림 개발 일지 #002 : [바로 가기]
- 나, 물림 개발 일지 #003 : [바로 가기]
그리고, 데모 버전 플레이 영상을 짧게 만들었습니다.
포스팅하기도 했지만, 아직 안 보신 분은 가볍게 구경하셔도 좋겠다는 생각에 아래와 같이 영상을 남겨봅니다.
그럼 본격적인 개발 일지를 시작합니다.
지난 포스팅 마지막에 저는 3주차 과정으로 본격적인 '시스템 개발'을 했었다고 말했습니다.
이제껏 주로 타이틀 화면과 인트로 연출, 그리고 미니게임을 만들어오면서 작은 성과를 보는 것에 집중했었는데 나름대로는 뿌듯한 결과물로 이어져왔다고 생각됩니다.
그 덕분에 자신감이라는 것이 생겨버렸죠...!

AI가 만들어 준 자신감이 그렇게 무섭습니다. 여러분.
여하튼...
저는 일련의 과정을 통해 '충분히 할 수 있겠다!'는 확신이 들었고, 그렇기에 본격적인 게임 개발을 해보자고 다짐하게 된 것이죠.
미리부터 생각해오던 게임의 청사진과, 내가 하고자 하는 이야기에 집중하며 필요한 기능의 명세를 비롯, 앞으로 확장될 가능성을 타진하는 시간을 가져보았습니다.
말하자면 그러합니다. '기획'인 겁니다. 그 중에서도 '시스템 기획'이란 것을 하게 되었다는 것이죠.
뭐가 되었건 간에 게임 기획이라 함은 저의 전문 분야입니다.
그리고 전문가(꼰대)로써 말하자면, 게임 기획을 한답시고 힘을 잔뜩(!) 줘서는 유연하지 못한 구조가 짜여지기 마련입니다.
저는 언제나 초기 시스템은 설렁설렁 설렁탕같은 느낌으로 후룩후룩 마신다는 그런... 감각......!

...죄송합니다.
오늘 점심은 국밥으로 먹어야겠습니다.
여하튼 저는 3주차 개발 과정으로 '나, 물림'에 적용되는 3가지 기본적인 시스템 구조를 설계, 구현까지 마칠 수 있었습니다.
바로 이것들입니다.
1. 기본적인 대화 구조 = 대화 시스템 (Dialogue System)
'나, 물림'의 장르는 어드벤처입니다.
게임 속 세상을 돌아다니면서 각종 오브젝트를 조사하고, 아이템을 찾아 얻으며, 적재적소에 얻은 아이템을 사용하며 게임이 진행됩니다.
그렇기에 플레이어 캐릭터가 내뱉는 '대사'의 양이 많을 수밖에 없습니다.
제가 구상했던 '대화 시스템'은, 게임의 진행에 있어 메인 뼈대와 같은 것이었습니다.

대화 시스템의 가장 기본적인 기능이란, 아래의 내용들이었습니다.
- 대화는 별도의 테이블(DialogueGroupTable)을 제작, 그룹 ID로 관리된다. (DialogueGroupID 부여)
- 대화는 기능에 따라 종류를 구분, 관리할 수 있도록 한다. (Type 컬럼)
- 일반적인 대화 = Type 0
- 선택 가능한 선택지 = Type 1
- 대화 Type은 추후 늘어날 수 있다.
- 하나의 그룹 ID에는 여러 개의 대화가 존재할 수 있으며, 순서에 따라 호출된다. (Step 컬럼)
- Type = 1 (선택지)의 경우에는, 동일한 Step값을 입력하여 동시에 지문이 나타날 수 있도록 한다.
- 특정 대화가 끝난 이후, 별도의 대화 그룹을 호출하여 연결할 수 있도록 한다.
- 연결 대화는 DialogueGroupID를 입력하여 호출하도록 한다. (NextDialogueGroupID 컬럼)
간단한 기능명세입니다.
이 기능들을 관리하기 위해 저는 엑셀 데이터 시트를 준비했고, CSV 파일로 추출까지도 하였습니다.
엑셀을 CSV파일로 추출하는 법은 저의 지난 포스팅에 자세히 설명하기도 하였으니, 관심있으신 분들의 많은 참고 바랍니다.
엑셀 데이터 CSV 저장 매크로!
안녕하세요. 나위입니다. 게임을 만들다 보면 엑셀을 사용해서 데이터 테이블을 만드는 경우가 많죠. 이 블로그에 연재했었던 마이너리티 아레나의 기본 전투 시스템 기획서를 작성하면서도 데
gamedesignernawe.tistory.com
1차로 작업한 DialogueGroupTable의 모습은 아래와 같았습니다.
| dialogueGroup | 대화 타입 | 다음 대화 그룹 | 순서 | 내용 |
| dialogueGroupID | diaType | nextDiaGroupID | step | dialogue |
| 100 | 0 | -1 | 1 | 좋은 아침‚ 나. |
| 100 | 0 | -1 | 2 | 날씨 맑음. 공기 좋음. 컨디션 좋음. |
| 100 | 0 | -1 | 3 | …고장난 주제에 알람은 잘 울려주는 시계도 좋음. |
| 100 | 0 | -1 | 4 | <꼬르르륵> |
아주 단순한 형태이죠?
작성된 데이터의 내용을 해석하자면 이런 겁니다.
어디서든지 100번 대사 ID를 호출하면, 일반 대화의 형태로 '좋은 아침, 나' 부터 '<꼬르르륵>까지 순서대로 호출하고 대화 종료.
이제 이 내용을 바탕으로, 여러가지 기능이 덧붙여질 거라 생각됩니다.
그리고 해당 기능을 또 구현하기 위한 작업이 이어져야 했죠.
이후로는 AI를 통한 코딩이 뒷받침 되어야 했습니다. 방식은 간단합니다. 물어보고, 따라하고, 수정하고.

사실상 게임의 가장 기본이 되는 구조이기도 합니다.
어디서나 호출할 수 있어야 하고, 어디서나 보여질 수 있어야 하는 거였습니다.
그렇기에 최대한 유연한 형태를 가지는 것이 중요했죠.
그런 의도로 작업을 했고, 잘 구현될 수 있었습니다.
기본적인 이벤트 구조
대사 시스템의 기본을 구축한 다음에 작업한 것은 '이벤트'였습니다.
이벤트에 대해서는 정의하기 나름인 것 같습니다. 오브젝트와 상호작용으로 연결된 대사가 나온다 해도 '이벤트'가 될 수 있고, 특정한 컷씬이나 애니메이션이 나온다고 해도 '이벤트'라 부를 수 있겠습니다.
사실 상 게임 내의 모든 요소가 '이벤트'로 구성되어있다 해도 과언이 아닐텐데, 그렇게까지 이벤트의 정의를 확대해 버리면 '대사 또한 이벤트다...!' 같은 말을 하게 될 지도 모릅니다.

하여서, 저는 '나, 물림'의 이벤트를 이런 것으로 정의하였습니다.
기존의 오브젝트 상호작용으로 처리하지 못하는, 특정한 조건이나 행위에 의해 진행되는
대화를 비롯하여 애니메이션 재생, 컷 씬 표현, 카메라 이동 등.
연출적인 부분의 처리를 담당하는 구조 및 체계.
...좀 길죠?
하지만, 동시에 가장 명확한 표현이기도 합니다.
제가 이벤트 시스템에 원하는 것이 딱! 저런 것이니까요.
그렇기에 제가 이벤트의 기본적인 기능 명세로 원한 것도 이런 것이었습니다.
- 이벤트는 별도의 테이블(EventTable)을 제작, ID로 관리된다. (EventID 부여)
- 하나의 이벤트 ID에는 여러 개의 연출 타입과 값이 존재할 수 있으며, 순서에 따라 호출된다. (Step 컬럼)
- 동일한 Step값을 사용하는 경우는 없다.
- 동일한 Step값이 입력될 경우, 기획 오류로 간주하고 2번째 동일 값을 무시한다.
- 이벤트는 기능에 따라 종류를 구분, 세부 값을 관리할 수 있도록 한다. (EventType / EventValue컬럼)
- Type 1 = 대화 호출 기능. eventValue에는 DialogueGroupID 입력.
- Type 2 = 플레이어 방향 설정 기능. eventValue에는 방향 값(0 = 오른쪽 / 1 = 왼쪽) 입력.
- Type 3 = 플레이어 애니메이션 설정 기능. eventValue에는 애니메이션 이름 입력.
- Type 4 = 플레이어 위치 이동 기능. eventValue에는 이동 값 입력.
- Type 5 = 카메라 위치 이동(X축) 기능. eventValue에는 이동 값 입력.
- Type 6 = 카메라 위치 이동(Y축) 기능. eventValue에는 이동 값 입력.
- 이벤트 Type은 추후 늘어날 수 있다.
- 프레임 딜레이 값을 지정, 특정 이벤트의 연출 시간을 설정할 수 있도록 한다. (frameDelay 컬럼)
- 대화의 경우, 해당 대화 그룹이 모두 종료된 이후에 다음 순서 이벤트를 발동시킨다.
- 딜레이 값이 0일 경우, 다음 순서의 연출을 즉시 호출한다.
1차로 작업한 EventTable의 모습은 아래와 같았습니다.
| EventID | 순서 | 연출 타입 | 연출 값 | 프레임 딜레이 |
| eventID | step | eventType | eventValue | frameDelay |
| 1 | 1 | 2 | 1 | 0 |
| 1 | 2 | 1 | 1000 | 0 |
| 1 | 3 | 5 | -430 | 0 |
| 1 | 4 | 1 | 1001 | 0 |
| 1 | 5 | 5 | 430 | 0 |
| 1 | 6 | 1 | 1002 | 0 |
작성된 데이터의 내용을 해석하자면 이런 겁니다.
어디서든지 1번 이벤트 ID를 호출하면, 플레이어가 왼쪽을 바라보고, 1000번 대화 ID를 호출한 뒤, 카메라를 X축으로 -430 움직이고, 1001번 대화 ID를 호출하고, 카메라를 X축으로 430 움직이고(원복), 마지막으로 1002번 대화를 호출한 뒤 이벤트 종료.
이 또한, 대화 시스템과 같이 여러가지 기능이 덧붙여질 거라 생각됩니다.
컷 씬 타입이 들어갈 수 있고, 화면을 암전시키거나 밝게 만드는 페이드 인 / 아웃 효과를 넣을 수도 있습니다.
사운드를 호출하거나 별도의 씬을 부르는 것 또한 가능할 거로 기대하고 있어요.
대화 시스템과 마찬가지로 필요할 때마다 기능 구현을 해 나가면 될 거라고 생각합니다.
일단은 여기까지! 기본 기능 구현에 충실하려 합니다.
기본적인 플레이어 버프 구조
마지막으로 구성한 시스템은 플레이어 버프입니다.
이건 오브젝트 상호작용과 이벤트를 비롯, 다양한 요소를 통해 캐릭터에게 여러 상태를 줌으로써 플레이 방향성을 다양하게 하기 위한 기반 시스템입니다.
...라고는 하지만, 당시에는 그에 대한 디테일한 계획을 세워두지는 않았습니다.
먼 미래의 일일 거라 생각했어요. 아니, 먼 미래도 아니구나, 지금 이 포스팅을 작성하는 현재 단계에서는 맞닥뜨린 현실입니다.

여하튼 그랬었기에 이 시스템의 초기 모습은 아주 단순합니다.
그냥 버프의 이름과 툴 팁 설명, 아이콘 정도만 나타나면 되는 구조로 설정했어요.
| buffID | 이름 | 설명 | 아이콘 이미지 |
| buffID | name | desc | iconFile |
| 100 | 배고픔 | 배고파. 먹을만한 걸 찾아볼까. | Player_Hungry01.png |
단순하죠?
딱히 기능 명세랄 것도 없이, 이 정도만 만들어 두고 넘겼습니다.
추후에 관련된 기능이 훨씬 보강될 예정이라는 걸로 말이죠.

...이제는 더 이상 미룰 일이 아니게 되어버렸군요.
포스팅을 쓰다가 현실을 마주하였습니다.
힘냅시다! 우리! 가 아니고 나...!

이렇게 3주차 작업의 내용을 좀 더 상세하게 다뤄봤습니다.
다음으로는 개발 4주차에 작업했었던 내용을 정리해 봤어요.
이번에도 지난 번과 마찬가지로 GitHub의 History 이력을 보면서 정리해봤답니다.
- '나, 물림' 개발 일지 (2025. 1. 14 ~ 2026. 1. 21)
- 버전 관리 : GitHub
- 사용 엔진 : Godot 4.5.1
- 작업 내용
- 조작법 안내 (튜토리얼) 제작 및 적용
- 미니게임 (MiniWire) 제작
- 컷 씬 연출 개발
- 데이터 리빌딩
기본적인 시스템 구현에 발맞춰 컨텐츠를 쌓아올리는 단계라고 보여집니다.
꽤 굵직한 내용으로는 새로운 미니게임 (MiniWire) 의 개발이라 생각되는데요, 이건 기존의 유명한 게임을 참고한 것이 아닙니다.
무려 제가 직접! 약간 어디서 본 듯도 하겠으나 일단은 오리지널리티를 가진 게임으로 기획 및 개발을 했다는 점!
그것이 무엇인고 하니, 바로 이런 게임입니다.

네. 그렇습니다.
사실 좀 흔한 미니게임의 모습이죠.
뭐 엄청나게 특별하다던가 그런 건 아니긴 합니다. 인정할 건 인정해요. 저도.
하지만, 세상에 새로운 게 뭐 얼마나 있겠습니까! 다 조금씩 기존의 것들을 바꿔가면서 만들고 또 거기서 혁신이 일어나고 가정이 굳건해지고 국가가 부흥해지며 민족이 또 지구가 온 우주의 평화가...!! (열변)
...
죄송합니다. 어쩌다 보니 급발진을 크흠흠.
여하튼, 나름대로는 머리를 굴리면서 미니게임 하나를 이렇게 추가하였으니 다음 개발일지에는 이와 관련된 이야기를 많이 해볼 수 있을 것 같아요.

여전히 말이 많았습니다만, 이 정도로 줄일까합니다.
다음에 이어질 개발일지에도 많은 관심 바랍니다.
읽어주셔서 감사합니다!
고맙습니다!!
'도전! N잡러! > 도전! 게임 개발!' 카테고리의 다른 글
| '나, 물림.' 개발 일지 #006 (11) | 2026.04.02 |
|---|---|
| '나, 물림.' 개발 일지 #005 (5) | 2026.03.27 |
| 나, 물림(Me, Bitten) : DEMO Gameplay Trailer (4) | 2026.03.19 |
| '나, 물림.' 개발 일지 #003 (2) | 2026.03.19 |
| '나, 물림.' 개발 일지 #002 (11) | 2026.03.12 |
댓글