정기 작업보고

All
달자여
달리는 자들을 위하여 #5
안녕하세요, 이뿡식입니다. 8월에는 수정된 기획에 따라 엔진을 변경하는 큰 변화가 있었습니다. 재미있게 읽어주시면 감사드리겠습니다. 엔진을 바꾸기로 했다 그리드 인벤토리가 아닌 일반 인벤토리를 사용하기로 하면서 게임에는 인벤토리, 퀘스트, 대화 기능만 남게 됐고, 이 정도는 다른 비주얼 노벨 툴로 구현할 수 있다고 판단해서 개발 초기에 빠르게 엔진을 교체하기로 결정했습니다. 물론 지디벨롭으로도 위의 기능 구현에 큰 문제는 없지만, 대화 스크립트 작성에 yarn spinner 클래식을 사용해서 기능이 제한적이고+파서에 버그가 있어 명령어가 빠르게 실행됐다가 느리게 실행됐다가 종잡을 수가 없다는 점에 불만을 가지고 있어 더욱 엔진 교체의 필요성을 느꼈습니다. 어떤 툴을 사용할까 렌파이 https://www.renpy.org/ 비주얼 노벨 툴로 바꿔야겠다고 생각했을 때 가장 먼저 떠올린 것은 단연 렌파이입니다. 파이썬을 사용해서 다양한 기능을 추가할 수 있다는 확장성, 두터운 커뮤니티, 상세한 도움말 문서 등의 장점이 있습니다. 하지만 제가 파이썬을 몰라서 버그가 발생했을 때 스스로 해결하기가 어렵다는 점 때문에 후보에서 탈락하게 됐습니다. 라쿠고, 다이얼로직 https://github.com/dialogic-godot/dialogic 둘 모두 고도 엔진 비주얼 노벨 라이브러리입니다. 렌파이와 마찬가지의 이유로(GD스크립트를 몰라서 버그를 스스로 고칠 수 없다) 탈락했습니다. 투스데이 https://kirill-live.itch.io/tuesday-js 투스데이는 5년 전에 출시됐는데도 업데이트가 활발하고 생각보다 커뮤니티 규모가 있어서, 조용히 치고 올라오는 강자라는 인상입니다. 스크립트가 아닌 노드를 사용해서 스토리를 쓸 수 있고, JS 엔진이라 html css js를 알고 있다면 쉽게 수정할 수 있습니다. 하지만 이미지가 엄청나게 깨져서 픽셀아트 그래픽에 치명적이라 탈락했습니다. 트와인 https://twinery.org/ 서양권에서는 렌파이는 물론 알만툴(!) 이상의 인기를 가진 인터렉티브 픽션 엔진입니다. 투스데이처럼 JS 기반의 엔진이라 웹 개발 지식이 있다면 쉽게 수정이 가능하고, 노드로 대화문 사이를 이어서 스토리를 쓸 수 있습니다. 또 알만툴처럼 커뮤니티에서 다량의 스니펫과 테마를 배포하고 있기 때문에 이것들만 사용해도 근사한 게임을 만들 수 있습니다. 다만 근본이 인터렉티브 픽션 엔진이라 이미지 사용이 제한적이고 그마저도 깨지는 경우가 많아서 탈락했습니다. 티라노빌더 https://tyranobuilder.com/ 티라노 스크립트의 GUI 빌더로, 연출부터 스크립트까지 코드 한 줄 없이 블럭만 쌓아서 개발할 수 있어 매우 쉽습니다. 그러나 성능, 보안 문제가 있고 게임의 규모가 커지면 가독성이 크게 떨어져서(사실 이쪽은 모든 이벤트/블럭 기반 툴의 고질적인 문제) 탈락했습니다. 나랫 https://narrat.dev/ 디스코 엘리시움 스타일의 CRPG를 만들 수 있는 엔진입니다. 인벤토리, 퀘스트, 스킬 체크 등 CRPG에서 흔히 보이는 기능을 기본으로 제공하고, 엔진의 설정 파일 또는 CSS로 UI를 수정할 수 있지만 새로운 UI를 추가하기 위해서는 vue를 써야 하는 등 다른 JS 기반 엔진에 비하면 약간의 난이도가 있습니다. 비교하자면 렌파이 > 나랫 > 기타 JS 엔진 > 티라노 빌더 순서로 쉬워진다고 생각합니다. 제가 원하는 기능이 이미 만들어져 있고, 스스로 버그를 고칠 수 있기 때문에 최종적으로는 나랫 엔진으로 교체하기로 결정했습니다. 진행 상황 모달과 배경을 제외한 UI를 다듬고, 나랫에는 없는 기타 기능(미션의 남은 턴을 표시하는 게이지 등)을 만들고 있습니다. 특히 지디벨롭에서는 성능 코스트가 심해서 쓰지 못했던 연출을 CSS로 가볍게 적용할 수 있어서 만족하고 있습니다. 그리고 플라이의 디자인을 다시 리파인했습니다. 아무리 그래도 서부극, 로드트립을 레퍼런스 삼은 게임에 하라주쿠 스트릿을 입은 캐릭터는 좀 아닌 것 같아서 작품의 톤에 맞게 펑키하게 바꿨습니다. 호불호가 갈릴 수 있을 것 같아 좀 걱정입니다만... 그건 예전에도 그랬어서(ㅋㅋ) 별다른 문제가 없다면 이대로 픽스할 듯 합니다.
  1. 달자여
  • BBUNSIK
달리는 자들을 위하여 #4
안녕하세요, 이뿡식입니다. 7월에는 지난 6월에 개발을 쉬면서 생각했던 문제점을 개선하기 위해 기획과 UI를 수정했습니다. UI 개선 기존의 레이이아웃은 중앙에 인벤토리가, 사이드에 대화창이 있는 구조였습니다. 그러다보니 대화창이 옵션이고 인벤토리가 메인처럼 느껴지게 되어서 게임의 흐름을 설계하기가 어려웠습니다. 게임에서 계속 쳐다봐야 하는 건 인벤토리가 아니라 대화창과 미션인데 말이죠. 또 아이템에 피직스를 적용해서 실제 물건처럼 쌓이게 한다는 아이디어도 처음에는 획기적으로 보였지만 가방이 꽉 찼을 때 피직스가 불안정해지는 점, 아래쪽에 깔린 아이템을 꺼낸 후에는 잉여 공간을 없애기 위해 계속 정리를 해야 한다는 점 등 갈수록 장점보다는 단점이 더 두드러졌습니다. 다양한 게임과 강의를 보며 수련 기간을 가지고 다시 수정한 레이아웃입니다. 여행 수첩이라는 컨셉으로, 게임 속 세계를 묘사하는 중요한 역할을 하는 미션과 대화창을 중앙에 놓았습니다. 설정, 스탯, 인벤토리 등 부수적인 정보는 가장자리로 밀어서 필요할 때 마우스로 클릭하거나 호버해서 확인하도록 했습니다. 인벤토리의 중요성이 낮아진만큼 피직스를 제거하고 격자 그리드에 아이템을 배치하는 일반적인 인벤토리로 바꿀 예정입니다. 스탯 또한 중요한 정보이니만큼 중앙에 놓는게 낫지 않을까 고민중인데, 스탯을 HUD로 표시해서 현재의 컨셉(여행 수첩)을 깨는 건 피하고 싶습니다. 좀 더 시간을 두고 생각해봐야 할 듯 합니다. 스토리 UI와 함께 스토리에도 많은 변화가 있었습니다. 스포일러가 되지 않도록 시놉시스만 간략히 말씀드리자면, 소를 다루는 능력을 가진 주인공 플라이(의뢰인)가 정부의 소를 관리하는 카우걸이 되기 위해 잭(용병)과 함께 수도로 여행을 떠난다는 내용입니다. 뜬금없이 초능력이나 소라는 설정이 생겨서 전작을 플레이 하신 분들께 어색하게 다가올 것 같아 걱정입니다만, '플라이와 잭이 여행을 떠난다' 외에는 없다시피 하던 크램프드 로드의 스토리에 개연성과 깊이가 생겼다고 생각합니다. 아마도…!
  1. 달자여
  • BBUNSIK
달리는 자들을 위하여 #3
안녕하세요, 이뿡식입니다. 5월에는 BIC 제출을 위해 열심히 개발했고... 실패했습니다! 하지만 개발을 시작한 이래 가장 진척이 큰 달이었습니다. 역시 개발 의욕을 끌어올리는 데에는 이런 행사나 지원사업의 힘이 강한 것 같습니다. 프로토타입 개발 기본적인 대화, 보상, 전투 시스템을 완성하고 3개의 스토리 인카운터와 12개의 랜덤 인카운터로 구성된 프로토타입을 만들었습니다. 하지만 개발 막바지에 인카운터들을 모두 연결했을 때 예상치 못한 버그가 터져서 제출을 실패했습니다. 나중에 끈질기게 디버깅을 해보니 yarn spinner 스크립트 파서 자체에 문제가 있어서 같은 커맨드를 사용해도 실행이 되거나, 안 되거나, 늦게 되는 등 제멋대로였던 것이었습니다. 시간이 좀 더 있었다면 제출이 가능했을 텐데 아쉽습니다. 처음부터 만들어보자 버그를 발견하고 나니 yarn과 연계된 모든 이벤트를 다시 만들어야 하는 지경이 되어서, 테스트 플레이에서 발견된 문제를 개선할 겸 해서 아예 처음부터 다시 만들어보자고 생각했습니다. 1안입니다. 게임기 모양 프레임을 포기하고 내부 요소를 키우고, 네오 브루탈리즘을 참고한 플랫한 디자인으로 변경했는데, 포스터와 달리 게임 화면은 요소의 크기나 색상 조정이 제한적이다보니 시인성이 낮아진 것 같고...무엇보다도 화면이 심심해서, 이 때 만든 대화+로그 저장 기능 빼고 전부 폐기했습니다. 이후 개발을 조금 쉬면서 기획과 UI에 관한 공부를 하고 다시 만든 2안입니다. 기존의 게임과 가장 큰 차이점은 인벤토리입니다. 그리드 인벤토리에서 동물 타워처럼 피직스를 사용해서 물건을 쌓는 인벤토리로 변경했는데, 다른 그리드 인벤토리 게임처럼 그리드를 활용한 메카닉(같은 열의 아이템을 강화하는 등)이 없을 것이라면 굳이 어렵고 리소스도 많이 잡아먹는 그리드를 구현할 필요는 없다고 생각했습니다. 그리고 가방 아래쪽은 물건, 가방 위쪽은 정보(메모, 사진, 로켓 등 스토리의 단서가 되는 아이템)를 저장하는 인벤토리로 구분해서, 커다란 가방을 보면서 진행하는 아기자기한 CRPG라는 컨셉을 강화했습니다. 컨셉에 맞춰 스토리도 둥글게 변경할 예정입니다. 프로그래밍 저는 지금까지 모든 이벤트를 한 씬에 때려넣고 개발을 했는데... 규모가 있는 게임에서는 이렇게 하면 유지 보수가 어렵다는 사실을 깨달았습니다! 그래서 이벤트를 기능별로 정리해서 외부 이벤트로 만든 다음 상황에 따라 불러오도록 해서 당장 불필요한 이벤트를 차단하고, 이벤트의 시인성도 좋아지도록 정리했습니다. 각 이벤트를 논리적으로 구분하는 일종의 교통경찰이 생긴 셈입니다. 또 Gdevleop를 쓰지 않는동안 프리팹이라는 기능이 생겨서 이것을 활용해 아이템의 이름과 개수를 표시하는 프리팹을 만들어보았습니다. 기존에는 오브젝트에 수동으로 요소를 결합시켜야 해서 이런 오브젝트가 화면에 많이 있으면 성능이 떨어질 수밖에 없었는데, 이제 여러 오브젝트를 하나의 프리팹으로 만들어서 성능 걱정이 덜해졌습니다.
  1. 달자여
  • BBUNSIK
달리는 자들을 위하여 #2
안녕하세요, 이뿡식입니다,,, ?? 분명 개발 지연 공지를 올렸는데 달자여 개발일지가 올라왔습니다. 아무래도 저는 뭔가를 선언하기 전에 2일은 더 생각을 해봐야 하는 것 같습니다. 아니면 일단 선언을 해야 머리가 맑아지는 저주받은 타입일지도,,, 메인 프로젝트는 어쩌고 메인 프로젝트는 나만의 배틀로봇을 만들어 치고받는 탑다운 물리엔진 액션 게임이었습니다. 크램프드 로드의 후속작으로 시작한 달자여와는 다르게 이것은 처음부터 주제와 스토리와 메카닉이 깔끔하게 정립된, 비유하자면 엘리트 코스를 착착 밟은 모범생 같은 것이었습니다. 딱 하나만 아니었다면 원래 계획대로 진행할 수 있었습니다. 그런데 그 하나가,,, 게임이 재미없다는 거라서,,, 무슨 게임이든 머리 속에 있을 때는 세상에서 제일 재미있으니까 실제로 개발을 할 생각을 합니다. 이 게임은 머리 속에서 꺼내는 과정에서 도대체 무슨 문제가 있었을까요? 이것 저것 있지만 근본적인 문제는 '물리엔진에 익숙하지 않다','수학을 못 한다' 라고 생각합니다. 로봇끼리 부딫힐 때의 타격감과 조작감을 섬세하게 조정해야 하는데 이 부분을 대충 땜빵하고 넘어간 것들이 쌓여서 플레이가 답답해지더군요. 앞뒤좌우 움직이고 허공에 주먹질만 해도 재미가 있어야 하는데 AI와 치고받으면서도 재미가 느껴지지 않는 건 심각한 문제라고 판단하고 프로젝트를 엎었습니다. 하지만 다른 아이디어가 있는 것도 아닌 상태에서 고민만 하면서 시간을 태우고 싶지는 않았습니다. 뭔가 손을 움직일 거리가 필요했습니다. 다시 시작 그렇게 달자여를 다시 시작합니다. 달자여도 스크립트 단계에서 공회전 하던 중에 다른 프로젝트로 넘어간 것이라 술술 개발이 진행되지는 않았습니다. 대신 아이디어만 떠오르면 바로 스크립트를 쓸 수 있도록 기능을 모듈화하고, 기존 코드를 리팩토링하고, 다짜고짜 여행을 떠나면서 제발 신내림이 찾아와 2일 안에 스크립트를 마무리 할 수 있기를 하늘에 빌었습니다. 다행히 치성이 하늘에 닿아 지금은 스크립트를 쓰고 있습니다. 스크립트 작업에는 얼마 전에 무료 전환된 개인 위키 툴 옵시디언을 사용하고 있는데 감소/증가/차량/자원/아이템별로 카테고리를 나눠 어떤 종류의 인카운터를 얼마나 만들었는지 한 눈에 체크할 수 있어서 편하네요. 리팩토링이나 스크립트 아니면 삽질 뿐이라(,,,) 4월 개발일지에는 보여드릴 것이 많지 않네요! 5월에는 플레이 가능한 데모를 제작하는 것이 목표입니다.
  1. 달자여
  • BBUNSIK
달리는 자들을 위하여 #1
안녕하세요! 이뿡식입니다. '3월에는 진짜 제대로 살아야지'의 일환으로 달마다 개발일지를 작성하고, 개발 계정도 분리했습니다. 새롭게 태어난 저를 지켜봐주세요,,, 화면이 이뻐야 머리가 굴러가는 타입이라 배경을 먼저 그렸는데, 제가 직선 위주의 배경을 잘 못 그려서(기계는 그렇게 좋아하면서 왜,,,) 감을 잡기까지 상당히 고생했습니다. 참고한 레퍼런스에 비해 다소 심심해 보이게 완성됐지만, 일단 프로토타입을 만들고 UX가 정립된 후에 디테일을 채우려 합니다! 그리고 일러스트 스터디에 제출할 작품을 만들 겸 해서 키 비주얼도 그렸습니다. 썩 마음에 드는 상태가 아니라 나중에 고칠 것 같습니다. 인벤토리와 아이템 아이템 보상을 드래그해서 인벤토리에 놓거나 회전시킬 수 있다 전투 상황에 주사위를 굴리는 기능이 있는 아이템 백팩 빌더의 기초가 되는 그리드 기반 인벤토리와 체력 회복, 연료 회복, 주사위 추가 등 다양한 기능이 있는 아이템을 제작했습니다. 최초의 구상에는 차량 내구도, 허기를 회복하는 아이템도 있었지만,,, 게임이 복잡해서 이해하기 어렵다는 지적을 꾸준히 받았기 때문에ㅠ 기획을 다듬으면서 체력, 연료, 주사위로 통합되었습니다. 랜덤 보상, 랜덤 인카운터, 랜덤,,, 아이템 보상이 중복되지 않게 생성 지금껏 복잡한 데이터를 다루는 게임은 알만툴을 사용했고, Gdevelop로는 간단한 미니게임류만 만들어 와서 20개 정도의 아이템과 인카운터를 정리하려니 상당히 난감했습니다. 개발이 진행될수록 가짓수가 더 늘어나겠죠,,,! 알만툴을 쓰면서 변수에 같은 타입 ID를 가진 스킬 번호를 저장하고 랜덤하게 추출하는 카드 팩을 만들어본 경험이 도움이 됐습니다. 그 때는 그냥 여러 값이 들어간 변수라 생각하고 넘어갔는데, 이런 변수를 배열이라고 부르더군요. 덤으로 구조체나 클래스 등에 대한 설명도 들었지만 아직은 응용하기 어려운 것 같습니다. 인카운터 기획 기초적인 메카닉을 완성했으니 인카운터의 상세한 내용과 분류를 시트로 정리했습니다. 다른 덱빌더/텍스트 rpg 게임에서 통상적으로 보이는 인카운터에 더해 '달리는 자들을 위하여'만의 특색있는 인카운터를 제작하려 노력중입니다.
  1. 달자여
  • BBUNSIK
Made with Slashpage