Geophyte (지오파이트)
장르: 정통 로그라이크
개발 기간: 2020. 04. 08. ~ 2021.11.05. (업데이트 잠정 중단)
알파 릴리즈: 2021. 10. 04.
개발 엔진: 없음. tcod 라이브러리 기반 자체제작 프레임워크 사용중
개발 언어: Python 3 (관련 글)
사용 라이브러리: tcod (libtcod와 SDL의 python wrapper), numpy, PyAudio
개발 목적: 취미
무료 다운로드:
https://gamesm1th.itch.io/geophyte
소스 코드:
https://github.com/hagukin/Geophyte
지오파이트는 제가 대학교 1학년 때 프로그래밍을 처음 접하고 얼마 지나지 않아 제작한 프로젝트입니다.
지금보다 개발에 많이 미숙했던 만큼, 다시 살펴보면 부끄러운 코드가 많습니다 ㅎㅎ... 컨벤션도 들쭉날쭉하고, 최적화가 잘 되어있지 않은 부분들도 많은데, 이 점 감안하고 봐주시면 감사하겠습니다!
게임 소개
지오파이트(Geophyte)는 넷핵(Nethack), 브로그(Brogue)와 같은 게임들로부터 영감을 받아 제작 중인 정통 로그라이크 게임입니다. 2020년 4월 경부터 Python3으로 제작을 시작했으며 자체 제작한 프레임워크를 기반으로 제작되었습니다.
다양한 아이템과 마법들을 활용해 몬스터들과 지형지물을 뚫고 던전 최하층에 있는 "쿠가의 아뮬렛"을 탈환해 다시 지상으로 가지고 돌아오는 것이 게임의 목표입니다.
현재까지 구현된 기능들
현재까지 구현된 기능들 중 핵심적인 기능들을 요약해보았습니다.
생략된 부분들이 다수 있을 수 있습니다.
(2022.05.03. Alpha v2.2.1 최종 수정)
A. 절차적 던전 생성
지오파이트는 정통 로그라이크를 지향합니다.
이는 매 판마다 모든 맵, 몬스터, NPC, 아이템 등이 랜덤하게 생성됨을 의미합니다.
절차적 생성 알고리즘을 제작할 때 가장 많이 고려한 부분 중 하나가 "플레이하기에 재미있는가?"입니다. 개발 초기에는 어차피 생긴 것만 그럴싸 하면 다 거기서 거기라고 생각했지만, 개발을 해 나가며 전혀 그렇지 않다는 것을 깨닫고 이러한 부분들을 신경쓰며 개발해나가고 있습니다.
1) 다양성을 추구하는 지형
지오파이트는 지형적인 측면에서 대부분의 고전 로그라이크가 지향하는 것 이상의 복잡성을 추구합니다.
지오파이트는 이러한 복잡한 지형을 구현하기 위해 바이옴과 터레인이라는 개념을 고안해 사용하고 있습니다.
바이옴은 던전의 한 층의 지형 전체를 포괄하는 개념이고, 테리인은 던전의 방 하나의 지형에 해당되는 개념입니다.
바이옴의 예시로는 사막, 정글 등이 있을 수 있고, 지형의 예시로는 함정이 가득한 방, 연못, 상점 등이 있을 수 있습니다. 현재 지오파이트에는 바이옴과 지형을 통해 던전을 생동감있게 생성하는 시스템이 갖추어져 있으며, 바이옴과 지형을 생성할 때 사용되는 수치들 또한 아주 세부적으로 프레임워크 단에서 변경할 수 있도록 프레임워크를 제작해 새 컨텐츠를 쉽게 추가할 수 있는 구조로 게임을 개발하고 있습니다.
2) 다양한 형태의 방
다양한 형태를 가진 방들을 생성하고, 이 방들을 맵 상에 배치할 때 방들간의 충돌을 감지하는 알고리즘을 통해 맵 생성 과정에서 발생하는 오류를 최소화했습니다. 각 방 형태별로 생성될 확률을 조정할 수 있으며, 특정 형태의 방에는 특정한 지형만이 나타나도록 조정할 수도 있습니다. 또한 Blob(덩어리)를 생성하는 알고리즘을 제작했으며, 해당 알고리즘을 통해 보다 불규칙하고 플레이하기 재미있는 던전을 만들어 내었습니다. 속도가 느린 파이썬의 특성상, 방을 생성해 관리할 때는 단순히 방 좌표들을 열거형에 담는 방식이 아닌, 더 최적화된 방식을 사용중입니다.
3) 체계적인 터널 생성 시스템
방과 방 사이를 터널로 이을 때, 단순히 A에서 B로 직선으로 잇는 단순한 알고리즘을 사용하지 않습니다.
통로를 생성할 때 특정 타일은 지나가지 않게 하도록 조정할 수 있고, 통로 생성 시 사용하는 pathfinding 알고리즘의 파라미터들을 조정함으로써 통로의 대략적인 형태를 변경할 수 있으며, 그 외에도 다양한 기능들이 갖추어진 터널 생성 시스템을 가지고 있습니다.
4) 환경에 적합한 몬스터 스폰 시스템
지오파이트의 모든 몬스터들에게는 난이도(difficulty)가 지정되어 있습니다. 지오파이트는 몬스터를 스폰할 때 플레이어의 현재 스테이터스, 던전의 깊이(depth), 맵 바이옴에 설정된 값, 게임의 난이도 등 다양한 요소를 고려해 플레이어에게 최적의 경험을 줄 수 있도록 던전에 스폰할 몬스터의 난이도를 결정해 스폰합니다.
또한 원한다면 프레임워크 단에서 수치를 조정해주는 것으로 특정 몬스터는 특수한 곳에서만 스폰되도록 설정할 수 있으며, 같은 종류의 몬스터이더라도 보유하고 있는 아이템, 장착한 무기, 가지고 있는 능력 등을 확률적으로 다르게 가지고 스폰되게 만들 수 있는 시스템이 구축되어 있습니다.
5) 특수 지형 생성 시스템
상점이나 보물상자가 있는 방, 몬스터나 아이템이 떨어질 수 있는 거대한 구덩이 등 지오파이트에는 여러 가지 특수 지형들이 존재합니다. 저는 이런 특수지형들이 랜덤하게 생성되면서도 게임 벨런스를 해치지 않고, 또 다른 맵 생성 알고리즘들과도 객체지향적으로 맞물리는 이상적인 형태로 사용될 수 있도록 개발했습니다.
이러한 특수 지형들은 별도의 지형 생성 알고리즘이 필요한데, 이러한 별도의 알고리즘들이 게임 내 하나의 큰 절차적 생성 과정에 자연스럽게 녹아들 수 있도록 프레임워크를 작성함으로써 새로운 지형 추가가 용이하도록 제작하였습니다.
B. 다양하고 현실적인 아이템 상호작용
지오파이트는 하나의 아이템을 하나의 종류로만 규정짓지 않습니다. 즉, 어떤 아이템은 먹을 수도 있고, 던질 수도 있으며, 동시에 장착 가능할 수도 있습니다. 지오파이트는 이러한 시스템을 구축하기 위해 부분적으로 ECS(Entity Component System)를 사용합니다.
현재 게임 내에는 150여종의 아이템이 존재하며, 이는 각각의 아이템이 가질 수 있는 다양한 상태이상이나 성질들을 제외하고 오직 아이템의 종류만 세었을 때의 개수입니다.
1) 음식 아이템
지오파이트에는 음식물의 영양분이 그 음식물의 종류, 양, 그리고 상태에 따라 결정됩니다.
지오파이트에서는 음식이나 시체 등이 부패하며, 이러한 부패의 속도는 그 음식/시체의 종류에 따라 변합니다. 이러한 부패는 던전에 존재하는 모든 유기물들에 걸쳐 발생하며, 플레이어가 주위에 없더라도 서서히 부패해갑니다.
또한 부패한 음식물은 영양분이 줄어들 수 있으며, 부패 상태에 따라 섭취 시 특수 효과를 부여할 수도 있습니다.
또한 음식물 자체가 가진 특수효과가 있을 수 있고, 음식물을 요리한다면 그 특수효과가 변할 수도 있습니다.
음식물이 썩어가면서 그 음식물의 종류나 크기에 따라 구더기들이 생겨날 수도 있고, 구더기들은 던전을 기어다니며 썩어가는 음식들을 실제로 먹어치우기도 합니다.
2) 아이템의 상태이상
지오파이트에서는 아이템 또한 상태이상의 영향을 받습니다. 아이템은 불타거나 부식되는 등 다양한 상태이상의 영향을 받을 수 있으며, 이러한 상태이상에 의해 아이템의 세부적인 능력치/기능 또한 영향을 받습니다.
(이처럼 다양한 상태이상이 존재한다는 것은 인벤토리나 상점 등을 구현할 때 고려할 점이 훨씬 많아지는 것을 의미합니다. 실제로 개발 중반 즈음 이러한 부분들 때문에 꽤 골머리를 앓았습니다.)
3) 투척 아이템
지오파이트에서 아이템을 투척할 때 아이템의 사거리는 플레이어의 힘(strength), 재주(dexterity), 아이템의 무게, 아이템의 공기저항(air friction) 등 여러 가지 요소들에 의해 복합적으로 결정됩니다.
아이템은 투척 시 받는 물리적 충격에 의해 일정 확률로 파괴될 수도 있고, 포션과 같은 일부 아이템은 파괴되는 것으로 인해 아이템에 맞은 개체, 혹은 아이템이 파괴된 위치에 부가적인 효과를 줄 수 있습니다.
아이템은 타겟에 맞을 경우 타겟을 관통할 수도 있고, 타겟은 아이템을 회피할 수도 있습니다.
4) 주문서, 물약, 마법서 등 마법 아이템
지오파이트에는 다양한 마법 아이템이 존재합니다. 또한 지오파이트는 이러한 아이템의 사용 시 플레이어에게 도움을 주는 약간의 시각적 인터페이스를 지원합니다. 이는 대부분의 정통 로그라이크에서 지원하지 않았던 기능입니다.
이러한 마법 아이템들은 대부분 어떤 한 가지 용도만이 아닌, 게임 내의 다양한 곳에서 활용될 수 있으며 이는 게임을 전략적으로 복잡하게 만들어주는 역할을 해 줍니다.
5) 장착 아이템
지오파이트의 아이템들은 장착할 수 있고, 이렇게 장착 가능한 아이템들은 강화할 수 있습니다. 지오파이트는 여러 장착 부위를 지원하는데, 플레이어나 몬스터에 만약 신체적 제약이 있다면 아이템을 장착하지 못하게 함으로서 현실적인 게임플레이를 지원합니다.
(ex. 오른팔이 잘린다면 그 팔에는 무기를 장착할 수 없습니다. 또 지나치게 몸이 크다면 작은 갑옷은 입을 수 없습니다.)
또 장착자가 힘이 부족하면 무거운 무기는 제 성능을 모두 발휘할 수 없으며, 녹슬거나 불탄 무기는 성능이 저하되기도 합니다. 팔을 2개 이상 가진 장착자의 경우 쌍수로 아이템를 장비할 수 있으며, 이러한 쌍수 장비에는 장점 및 단점이 모두 존재합니다.
6) 아이템의 감정 시스템
고전적인 로그라이크 답게 많은 아이템들은 매 게임마다 다른 외형과 다른 이름으로 등장합니다.
감정에는 여러 단계가 있는데, 아이템이 무엇인지 완전히 알게 된 상태, 아이템의 대략적인 종류만 알고 있는 상태, 아이템이 무엇인지 전혀 알지 못하는 상태로 나뉘어집니다. 아이템을 감정은 꼭 감정의 주문서를 읽는 것이 아니더라도 다양한 방법으로 할 수 있는데, 예를 들어 플레이어의 시야 내에 있는 오크가 그 옆의 엘프에게 빨간색 물약을 던졌는데 엘프가 물약에 맞아 불이 붙었다면 플레이어는 빨간색 물약이 화염의 물약임을 감정하게 됩니다.
7) 아이템의 저주 시스템
아이템은 저주받거나, 저주받지 않았거나, 혹은 축복받은 상태가 될 수 있으며, 각각의 상태에 따라 그 효과도 다르게 발현됩니다. 또한 특수한 아이템들의 경우 아예 저주를 해제할 수 없다거나 축복할 수 없는 경우도 존재합니다.
저주받은 아이템은 원래의 효과와 반대되는 효과를 내거나, 혹은 더 약화된 효과를 냅니다. 저주받은 아이템을 장착할 경우 저주를 해제할 때까지 장착자는 자의로 아이템을 장착 해제할 수 없습니다.
이러한 저주 시스템은 플레이어로 하여금 아무 생각 없이 얻은 아이템을 무조건 다 사용해보는 것을 방지하는 용도로도 사용됩니다.
8) 아티팩트
게임 내에는 "아티팩트" 라는 강력한 아이템들이 존재하며, 이러한 아이템들은 게임 전체에 걸쳐 단 한 차례 생성됩니다. 이러한 아티팩트들은 강력하거나 특수한 효과를 가지고 있는 경우가 많습니다.
9) 마법, 기술의 습득과 사용
플레이어 및 몬스터는 게임 내의 마법서 아이템이나 기타 수단을 사용해 마법, 기술 등의 능력을 습득할 수 있으며, 이를 사용할 수 있습니다. 이러한 능력들을 습득하기 위해서 필요한 지능의 요구치는 각각 다르고, 마법의 경우 발동 시 소모되는 마나량 등을 조정할 수 있습니다.
C. 복합적인 상호작용이 가능한 액터 시스템
지오파이트는 플레이어와 몬스터가 게임 구조적으로 완전히 동일한 취급을 받는 것을 지향합니다. 때문에 지오파이트에서는 몬스터, 플레이어 할 것 없이 모두가 '액터'라는 하나의 카테고리에서 게임 월드의 영향을 받습니다.
현재 지오파이트에는 50여종의 몬스터가 존재합니다.
1. 다양한 상태이상 시스템
플레이어와 몬스터는 하늘에서 떨어지는 운석에 맞아 몸에 불이 붙거나, 상한 음식을 먹고 식중독에 걸리거나, '산성 구체'의 폭발에 휩쓸려 갑옷이 부식되고 몸이 녹아내리거나, '떠다니는 눈'과 눈이 마주쳐 몸 전체가 마비되는 등, 다양한 상태이상을 얻을 수 있습니다.
이러한 상태이상은 단순히 "데미지를 얼만큼 준다"에 그치지 않고, 연쇄적인 반응을 유도하도록 제작되어있습니다.
예를 들어 액터에 불이 붙으면 단순히 불 데미지만을 받는 것에서 그치지 않고 그 액터가 보유한 아이템들에게도 화염 상태이상이 전이됩니다. 만약 불이 붙은 아이템 중 가연성 아이템이 있다면 그 아이템은 그을리거나 타서 없어질 것이고, 더 나아가 폭발성 아이템을 소지한 액터에게 데미지를 줄 수도 있습니다.
아가미가 없는 액터는 물속에 들어가 익사할 수도 있으며, 익사를 막기 위해 "수중 호흡의 아뮬렛"을 착용해 물에서 호흡할 수도 있습니다. 이처럼 다양한 상태이상이 존재하고, 이에 맞는 다양한 대처법이 존재합니다.
현재 존재하는 상태이상의 수는 약 25여종입니다.
2. 특정 플레이방식을 강제하지 않는 스테이터스/경험치 시스템
지오파이트는 스테이터스와 경험치 시스템에 대해 보다 현실적이지만 동시에 플레이어에게 자유를 주는 접근 방식을 취했습니다.
지오파이트에는 힘(Strength), 재주(Dexterity), 지능(Intelligence), 민첩성(Agility), 활력(Constitution), 매력(Charm / Charisma)과 같은 고전적인 D&D 스테이터스들이 존재하지만, 이러한 스테이터스들은 "힘 스텟이 증가하면 데미지 몇 퍼센트 증가"와 같이 단순한 용도로만 사용되지 않습니다.
게임 내의 아주 다양한 행동들은 이러한 스테이터스들로부터 복합적인 영향을 받으며, 지오파이트는 특정 스테이터스가 다른 스테이터스들보다 월등히 중요시되는 현상을 피하는 방향으로 설계되고 있습니다.
또한 지오파이트에서는 이러한 스테이터스를 증가시키기 위해 단순히 몬스터를 사냥해 경험치를 얻는 방법을 강요하지 않습니다. 지오파이트에서는 다양한 행동들이 모두 조금씩 능력치를 상승시키는 데 영향을 주며, 플레이어가 플레이하는 방식에 맞추어 자연스럽게 플레이어 캐릭터가 성장해나가는 게임플레이 방식을 가지고 있습니다. 때문에 지오파이트에는 가시적으로 보이는 "레벨"이 존재하지 않으며, 플레이어는 특정한 종류의 행동들에 초점을 두는 것으로 자신이 원하는 방향으로 캐릭터를 육성시킬 수 있습니다.
3. 플레이어와 동일한 행동이 가능한 몬스터들
몬스터들은 플레이어와 마찬가지로 인벤토리를 가지고 있으며, 아이템을 먹거나, 사용하거나, 장착하거나, 던지거나, 줍거나, 심지어는 플레이어처럼 마법이나 기술을 배우고 쓰거나, 펫을 길들이는 등 여러 행동이 가능합니다.
이러한 모든 행동들이 가능하도록 구조적으로 만드는 것과, 또 AI가 상황을 판단해 이러한 행동들을 적당한 시점에 하게 만드는 것 모두 쉽지는 않았지만 이를 구현했습니다.
4. 세부적인 수치와 캐릭터 커스터마이제이션
지오파이트 속의 존재하는 모든 액터는 굉장히 다양한 수치들을 지니고 있고, 이 수치들은 게임플레이의 많은 것에 영향을 줍니다. 이 수치에는 속도, 완력, 지능 같은 기본적인 것들부터, 선호하는 음식, 체중, 물리적인 크기 등 다양한 것들이 포함됩니다. 이러한 수치들은 복합적으로 작용해, 지오파이트 속의 몬스터들을 한 층 더 인터랙티브한 존재로 만들어 줍니다.
또한 지오파이트는 게임 시작 전 이러한 수치들을 플레이어가 커스터마이징할 수 있는 기능을 지원합니다.
캐릭터는 정해진 포인트를 원하는 대로 배분해 자신이 원하는 스타일의 플레이를 하기에 더 유리한 형태로 수치를 조절할 수 있습니다.
5. 수많은 종류의 몬스터
살아있는 던전을 만들기 위해선 다양한 몬스터들을 만들 필요가 있었습니다.
단순히 몬스터의 수치만 조금 바꿔서 복사 붙여넣기한 수준으로는 제가 원하는 살아있는 듯한 던전을 만들 수 없다는 것을 알기에, 저는 몬스터 하나하나를 전혀 다른 성향, 공격 방식, 선호하는 음식, 갖고 싶어하는 물건들, 세부적인 능력치 등을 가진 개성 넘치는 존재로 만들고자 노력했습니다. 또한 이런 몬스터들은 같은 종류라 할지라도 서로 다른 물건들을 가지고 시작할 수도 있고, 같은 종류이지만 전혀 다른 성향을 가질 수도 있습니다. 또 물속에 사는 몬스터, 수륙 양쪽에서 활동이 가능한 몬스터 등 다양한 행동양식을 가진 몬스터들을 제작했고, 컨텐츠 단 이전에 프레임워크 단에서 이러한 행동양식을 손쉽게 수정할 수 있도록 프레임워크를 개발했습니다.
게다가 이러한 몬스터들은 서로가 서로를 적대하는 경우도 잦기에, 이러한 적대관계가 게임 벨런스 측면에서 어떠한 영향을 미칠지도 고려하며 제작하였습니다. 한가지 예시로, 게임 내에는 "전쟁터"라는 바이옴이 존재하는데, 이는 엘프와 오크 간의 전쟁을 배경으로 한 지형입니다. 해당 지형에서는 엘프와 오크 수 십 마리가 서로 격렬한 전투를 벌이는데, 플레이어는 이때 전황을 보고 자신에게 유리하게 행동함으로써 위기를 극복해 나갈 수 있습니다.
D. 생동감을 주는 AI
저는 생동감 있는 던전의 느낌을 주기 위해 지오파이트의 AI에 많은 시간을 투자했습니다.
지오파이트는 몬스터가 하나의 생명체로 느껴지도록 하기 위한 여러 기능들을 갖추고 있는데, 몇 가지를 나열하면 다음과 같습니다.
1. 선별적인 타겟팅 시스템
지오파이트의 AI는 "오직 플레이어만을 공격"하거나 "무차별적으로 아무나 공격"하는 단순한 시스템을 갖고 있지 않습니다. 지오파이트의 몬스터 AI는 고전적인 로그라이크와 다르게, 플레이어 뿐만 아니라 자신들끼로도 적극적으로 상호작용을 하도록 작성되었으며, 이를 위해 세부적으로 타겟을 지정할 수 있는 시스템을 지원합니다.
특정 군(species)의 액터만을 공격하거나
특정 종류의 액터(type)만을 공격하거나
혹은 특정 개체(entity)만을 공격하라
등 세부적으로 타겟팅할 수 있는 기능을 갖추고 있습니다.
또한 이러한 타겟팅 규칙은 몬스터가 스폰된 이후에도 변할 수 있습니다.
공격적인 몬스터를 길들여 펫으로 삼거나, 평화적인 몬스터가 분노 상태이상에 빠져 모두를 무차별적으로 공격하는 등, 지오파이트의 AI는 "정해진 규칙에 의해 움직이는 기계"라는 느낌을 주기보다는 "상황에 맞게 행동하는 생명체"라는 느낌을 주는 방향으로 작성되었습니다. 심지어 펫을 다른 누군가에게 마법으로 강제로 빼앗거나, 먹이를 주지 않은 펫이 주인을 버리고 독립하는 등, AI는 예측 불가능하면서도 살아있는 듯한 느낌을 주도록 설계되었습니다.
2. AI에게 개별적인 시야 및 인지능력 부여
지오파이트의 AI들은 플레이어와 마찬가지로 개별적인 시야(Range of sight)를 가지고 있으며, 이들의 시야는 그 액터의 시력, 혹은 그 액터의 시각기관의 존재 여부 등에 의해 결정됩니다. 이러한 시야는 플레이어와 마찬가지로 벽과 같은 장애물이나, 시야 관련 상태이상에 의한 제한을 받습니다.
또한 텔레파시 능력, 생명체 감지 능력 등, AI 또한 플레이어처럼 "시야 외의 인지 기능"을 가질 수 있습니다. 예를 들자면, 텔레파시 능력을 가진 AI는 눈이 먼 상태이더라도 목표물의 위치를 파악하고 이동할 수 있습니다. 또한 생명체 감지 능력을 가진 AI는 벽 너머의 보이지 않는 적으로부터 도망칠 수 있습니다.
3. 지능적인 AI Pathfinding(길찾기)
지오파이트의 AI는 A*, 다익스트라 등 다양한 알고리즘을 사용해 주어진 위치까지의 경로를 찾습니다. 또한 지오파이트의 AI는 단순히 최단 경로를 찾는 것에서 그치지 않고 위험한 지형을 피해 지능적으로 경로를 찾고, 상황이 어쩔 수 없다고 판단될 때에는 위험한 지형 위로도 이동합니다.
더 나아가, 이러한 AI의 지능적인 길찾기는 그 AI를 보유한 액터의 지능 수치, 혹은 상태이상 여부에 따라 변화합니다. 즉, 지능이 다소 부족한 액터라면 위험한 지형에도 그냥 생각없이 이동하는 상황들이 발생할 수 있습니다.
예를 들어 수영을 못하는 AI는 물 속으로 들어오는 대신 물 옆을 따라 이동하지만, 수영을 못하지만 지능이 낮은 AI는 아무 생각 없이 물속으로 같이 뛰어들기도 하고, 수영을 잘하는 AI는 물 속으로 망설임없이 들어오는 등 다양한 반응을 보입니다.
이처럼 모든 AI를 지능적으로 만들거나 모든 AI를 멍청하게 만드는 것이 아니라, 액터의 지능에 따라 AI의 판단 능력도 변화시킴으로서 게임 속 액터들이 더 살아있는 것처럼 느껴지도록 제작했습니다.
4. AI의 욕구 시스템
지오파이트의 AI는 마치 인간처럼 무언가에 대한 욕구를 가질 수 있습니다. 던전 어딘가에서 썩어가는 시체를 찾는 굶주린 AI도 존재할 수 있고, 먹는 것에는 관심이 없고 오직 반짝이는 보석들에만 관심을 갖는 AI도 있을 수 있습니다. 이처럼 지오파이트의 AI는 타겟팅 시스템과 욕구 시스템을 통해 살아있는 하나의 생명체처럼 움직이고 행동합니다.
E. 인터랙티브한 지형
지오파이트에는 다양한 지형이 존재하고 이러한 지형들과 플레이어/몬스터들이 다양한 상호작용을 할 수 있습니다.
1. 모든 액터에게 반응하는 지형
게임의 모든 지형은 플레이어는 물론 몬스터들에게도 동일하게 반응합니다. 이는 던전에 생동감을 주기도 하지만, 플레이어가 지형 또한 하나의 수단으로서 게임플레이에 활용할 수 있도록 해 줌으로서 게임의 복합성을 높여 주기도 합니다.
이러한 지형의 예시로는 물, 불, 풀, 함정, 문, 나무, 구멍 등이 있습니다.
그중 문을 예시로 살펴보겠습니다. 플레이어와 마찬가지로 몬스터들도 문을 열어야 문 뒤로 지나갈 수 있습니다. 이 때 팔이 없거나 문을 열 만큼의 지능이 없는 몬스터들은 문을 여는 것을 포기하고 다른 길을 찾기도 하고, 힘이 충분히 강하다면 문을 부수고 이동하는 몬스터들도 존재합니다. 플레이어를 비롯한 던전 속의 모든 생명체들는 문을 이용해 자신을 쫓아오는 몬스터로부터 도망칠 수 있으며, 더 나아가 문을 잠구거나, 잠긴 문을 도구를 활용해 열거나, (나무 재질의 문일 경우)문을 태워버리는 등 여러 상호작용을 취할 수 있습니다.
2. 살아있는 맵
맵 상의 모든 일들은 플레이어 시야 내에 있을 때만 발생하는 것이 아니라 플레이어 시야 바깥에 있을 때도 발생할 수 있습니다. 때문에 시야에 보이지 않는 곳에서 어떤 몬스터가 함정을 밟았다면 함정은 작동됩니다.
이러한 살아있는 맵을 구현하기 위해서는 많은 벽들(메모리 문제, 연산 속도 문제)을 넘어야 했지만, 지오파이트는 최대한 이러한 문제와 타협해 플레이어에게 최대한 생동감 넘치는 던전을 제공하는 방향으로 제작되고 있습니다.
3. Non-modality를 지향하는 상점
지오파이트의 상점 시스템은 넷핵에서 영감을 받아 Non-modality를 지향하는 방향으로 제작되었습니다.
때문에 상점은 단순히 상점 메뉴창을 열고 아이템을 골라 구매하는 방식이 아닌, 보다 변칙적인 플레이가 가능하도록 현실 세계와 유사한 형태를 하고 있습니다. 지오파이트에서는 상점 주인이 마치 돗자리 상인처럼 상점 내에 물건을 펼쳐 놓고 판매합니다. 플레이어는 판매 중인 물건을 주워 살펴보고, 마음에 든다면 상점주인에게 돈을 건내주어 물건을 구매할 수 있습니다.
플레이어는 돈을 내지 않을 수도 있습니다. 상점 주인을 죽이거나, 상점의 벽을 부수고 도망친다거나, 상점에 몬스터를 잔뜩 소환해 상점 주인과 싸움을 붙이고 그 사이에 도망친다거나, 텔레포트 주문서를 사용해 상점에서 벗어나는 등, 다양하고 변칙적인 플레이가 가능합니다.
게임의 벨런스를 해치지 않고 이같은 상점 시스템을 구현하기 위해 상점 주인은 별도의 체계적으로 짜여진 AI를 갖추고 있습니다. 플레이어가 어떤 변칙적인 플레이를 하던, 그에 맞게 "상점 주인다운" 행동을 하는 방향으로 짜여졌고, 상점 시스템의 예상치 못한 방식으로의 악용을 막기 위해 상당한 고심 끝에 제작되었습니다.
또한 상점이란 특수한 구역은 던전 전체가 절차적으로 생성될 때 다른 지형과는 달리 고려되야 할 부분들이 더 많습니다. 던전 생성 시 바다 등에 의해 상점이 침수되어버리거나 하는 일을 막기 위해 상점과 같은 특수구역들은 별도의 처리를 해주어야 했고, 또 상점에 생성되지 말아야 할 아이템을 관리한다거나, 상점의 가격 책정 알고리즘을 제작한다거나 등 지형 외적으로도 복잡한 부분이 많았습니다.
F. 그 외 시스템적 기능들
1. 자체 제작 애니메이션 시스템
프레임 별로 재생 그래픽과 재생 길이를 편집할 수 있는 자체 인게임용 애니메이션 시스템을 제작했습니다.
애니메이션은 그 종류에 따라 플레이어 시야 내에서만 보이거나, 시야 밖에서도 보이게 조정할 수 있고, 각 프레임 별로 어느 위치에 무엇을 몇 초간 표시할 것인지를 세부적으로 조정할 수 있습니다.
2. 애니메이션이 존재하는 게임 타이틀 화면
사용자의 입력과 관계없이 콘솔에서 상시 재생되는 애니메이션이 존재하는 타이틀 화면을 제작했습니다.
3. 메세지 로그
메세지 로그에서는 게임 내의 다양한 정보들을 전달해줍니다. 이 때 메세지 로그는 어떤 이벤트가 플레이어의 시야 내에서 벌어졌는지를 확인해, 이를 통해 그 이벤트와 관련된 메세지를 표시할지 말지를 결정합니다.
예를 들어 플레이어의 시야 내에서 몬스터가 죽었다면 "ㅇㅇㅇ가 죽었다!" 라고 표시되지만, 시야 바깥에서 몬스터가 죽었다면 이는 메세지 로그에 표시되지 않거나, 혹은 "무언가 죽는 소리가 들린다"와 같은 형태로 표시됩니다.
4. 마우스 입력을 통한 게임플레이
게임 내의 핵심적인 조작들은 마우스 입력을 통해 플레이가 가능합니다. 마우스로 화면 상에서 타일을 클릭하면 해당 위치까지 위험한 타일을 피해 자동으로 플레이어가 이동하며, 이 과정에서 적을 마주치면 이동을 멈춥니다.
또한 마우스 커서를 맵 상의 어떤 위치에 가져다대면 해당 위치의 지형 정보와 엔티티 정보를 플레이어에게 표시해줍니다. 같은 지점에 하는 마우스 클릭이더라도 어느 시점에 하냐에 따라 플레이어의 의도가 다를 수 있기 때문에 이런 부분을 세심히 고려해 제작했습니다.
5. UI
지오파이트는 고전적인 로그라이크들에 비해 비교적 유저 친화적인 UI를 제공합니다. 실시간으로 상태이상을 표시해주는 창이 존재하며, 체력과 마나는 막대를 통해 읽기 쉽게 표시합니다. 또한 플레이어의 시야 내 정보를 실시간으로 표시해 줌으로써 게임의 접근성을 높였습니다.
6. 세이브 / 로드
지오파이트는 게임 데이터를 직렬화해 파일 형태로 저장할 수 있으며, 이를 통한 세이브와 로드를 지원합니다.
7. 스크린샷
지오파이트는 인게임 스크린샷 촬영을 지원합니다. (tcod 라이브러리 사용)
8. 다양한 디스플레이 해상도 지원
지오파이트는 다양한 해상도를 지원하며, 전체화면 및 창모드를 모두 지원합니다.
9. 플레이어 커스텀 컨픽
플레이어는 디스플레이를 비롯한 게임 속의 다양한 설정들을 변경할 수 있으며, 이러한 설정들은 게임을 종료해도 유지됩니다. 이러한 설정을 관리할 수 있는 게임 내 옵션 시스템이 존재합니다.
10. 유니코드 지원 및 한글화
지오파이트는 화면 전체가 오직 텍스트로만 이루어져 있으며, 때문에 보다 다양한 그래픽적 표현을 하기 위해 유니코드를 사용을 지원합니다. 또한 지오파이트는 한글 및 영어 2개 언어를 모두 지원합니다.
또한 한글의 경우 플레이어의 편의를 위해 "이(가)" 나 "을(를)"과 같은 표현을 지양하고, 대신 게임이 단어에 맞는 적절한 조사를 정해 출력합니다.
11. 프레임워크 단에서의 메모리 최적화
지오파이트는 던전의 층들이 축적되어 메모리 사용량이 지나치게 높아지는 것을 방지하기 위해 내부적으로 메모리를 관리할 수 있도록 프레임워크를 개발했습니다. 덕분에 지오파이트는 이론 상 무한히 깊은 던전을 제작하는 것이 가능하며, 이를 구현하기 위해 오픈월드 게임들에서 사용하는 방식과 유사하게 맵을 chunk로 나누어 저장하는 방식을 사용하고 있습니다. 또한 최대 메모리 사용량을 간접적으로 조절할 수 있는 기능 또한 존재합니다.
12. 사운드 모듈 개발
지오파이트의 프레임워크 내에는 멀티스레드에서 동작하는 사운드 모듈이 갖춰져 있습니다.
소리가 실제로 재생되는 부분은 PyAudio 라이브러리를 사용했으며,
멀티스레딩이라던지, 게임 내에서 어떤 식으로 사운드를 저장하고 언제 재생할지를 결정하는 것이라던지 오디오 재생 이외의 모든 기능은 직접 구현했습니다.
<처음으로 사운드 모듈이 추가되었을 때의 커밋 기록>
https://github.com/hagukin/Geophyte/commit/829eb4b0ac32dcae58501799488c9dae4ce2c875
13. 몬스터 도감
플레이어는 몬스터 도감을 통해 맞닥드린 몬스터에 대한 설정을 살펴볼 수 있고,
이를 통해 어떻게 대처하는 게 현명할지에 대한 힌트를 얻을 수 있습니다.
또한 플레이어는 그 동안 발생한 몬스터들을 하나하나 도감에 추가하며 점점 발전해나가는 재미를 느낄 수 있고,
이러한 도감 기록 내역은 게임이 종료되도 저장됩니다.
14. 시드 기반 지형 생성 기능
사용자가 입력한 시드를 기반으로 절차적 생성이 가능하도록 기능을 추가하였으며, 이것으로 사용자는 같은 시드를 입력하는 것으로 다른 사용자가 플레이한 맵을 자신도 플레이해보거나, 한 번 게임오버 된 맵에서 다시 도전하는 등의 행위를 할 수 있습니다.
15. 다중 언어 지원
게임 내에서 다양한 언어를 지원할 수 있도록 프레임워크에 기능을 추가하였습니다.
현재 자체적으로 작업중인 영어 번역이 80% 가량 완료되었으며, 유니코드에 존재하기만 한다면 어떤 언어로든 번역이 가능하도록 제작하였습니다.
또한 언어마다 별도의 클라이언트를 설치할 필요 없이, 하나의 클라이언트로 여러 언어가 모두 지원되며, 인게임 설정에서 언어를 변경할 수 있습니다.
지오파이트가 지향하는 가치
저는 지오파이트를 통해 "현실적이고 살아있는 듯한 던전"을 만드는 데 힘을 쏟고 있습니다.
(이는 그래픽적인 측면을 말하는 게 아닌, 게임 내의 시스템적 측면에서의 이야기입니다.)
이처럼 현실적인 게임플레이를 추구하는 이유는 크게 두 가지입니다.
1) 게임 로직이 전략적으로 깊이가 깊어는 동시에 이를 직관적으로 이해시킬 수 있다
보통 전략적으로 복잡한 게임들은 그 규칙을 직관적으로 이해하기 어려운 경우가 많습니다. 이는 우리가 그 규칙에 익숙하지 않기 때문인데, 처음 해보는 보드게임의 룰을 이해하는 데 오랜 시간이 걸리는 것도 같은 이유에서입니다.
하지만 이러한 전략성을 현실에 기반한 규칙을 통해 유도해낸다면, 게임을 전략적으로 복잡하게 만드는 동시에 그 규칙을 플레이어에게 직관적으로 이해시키는 것이 가능해집니다.
A라는 보드게임이 있다고 가정해 봅시다.
"A라는 보드게임에서 플레이어는 B라는 카드를 최대 C만큼 가질 수 있는데, 이때 C는 카드의 장수가 아닌, 카드 하나하나마다 부여된 D라는 숫자를 의미합니다. 즉 플레이어가 가진 카드들의 D의 합이 C를 넘지 말아야 합니다. 만약 플레이어가 가진 B라는 카드들의 D라는 숫자의 합이 C를 넘는다면 플레이어는 E라는 수치를 D * 3만큼 감소당합니다. 이때 E라는 수치는 플레이어의 행동 횟수와 관련이 되는 수치로... (생략)"
이 A라는 보드게임의 이야기를 지오파이트에 대입시켜보면 다음과 같습니다.
"지오파이트의 아이템에는 각각 무게가 존재합니다. 플레이어는 아이템을 정해진 최대 무게만큼 가질 수 있는데, 만약 아이템의 무게의 합이 일정 수치를 넘는다면 플레이어의 속도가 무게 * 3만큼 감소됩니다."
이처럼 동일한 로직을 지닌 두 게임이 있음에도, 그 규칙을 현실의 규칙과 유사한 형태로 표현했을 때 우리는 훨씬 더 빠르게 규칙을 이해할 수 있습니다.
또한 "E"라는 수치가 플레이어의 행동 횟수와 관련이 되는 수치라는 것을 직접 알려줘야 하는 것에 비해, "속도"라는 수치는 무엇인지는 굳이 설명하지 않아도 플레이어가 직관적으로 이해할 수 있습니다.
이처럼 지오파이트는 직관성과 복잡성 두 마리 토끼를 모두 잡기 위해 현실적인 게임플레이를 추구합니다.
2) 게임 내의 몰입감을 증가시킨다
게임의 몰입감을 증가시키는 방식은 여러 가지가 있을 수 있지만, 그 중 한가지가 게임의 현실성을 증가시키는 방법입니다.
만약 이 글을 읽는 여러분이 괴물들이 가득한 던전에 빠져 괴물에게 쫓기고 있다고 가정해봅시다.
도망치고 있던 여러분 앞에 커다란 호수가 보입니다.
여러분은 괴물을 피해 호수 속으로 뛰어들어 반대편으로 이동합니다.
괴물은 호수를 건너는 방법을 모르기 때문에 여러분은 무사히 도망칠 수 있었습니다.
하지만 이러한 상황을 보다 현실적으로 만드는 것으로 게임을 보다 더 몰입감 있고, 전략적으로 깊이있게 만들 수 있습니다.
여러분은 호수에 빠져 허우적거리다 익사할 수도 있을 것이고,
호수를 건너던 도중 여러분이 가지고 있던 귀한 주문서가 물에 의해 녹아 사라져버릴 수도 있을 것이고,
여러분이 입고 있던 강철 갑옷이 물에 의해 완전히 녹슬어버릴 수도,
혹은 그 강철 갑옷에 왁스를 발라두어 녹이 스는 걸 방지할 수도 있을 것입니다.
여러분을 뒤쫓던 괴물은 어쩌면 수영을 잘하는 괴물일지도 모릅니다.
어쩌면 수영을 할 줄 몰라 여러분을 뒤쫓아 왔다 물에서 익사할 지도 모릅니다.
수영은 할 줄 모르지만 지능이 높아, 호수를 빙 돌아가 여러분을 호수 건너편에서 기다리고 있을지도 모릅니다.
이처럼 고작 호수를 건더는 일 하나를 하더라도 현실성 있는 게임플레이를 추구한다면 훨씬 몰입감을 줄 수 있고, 훨씬 전략적으로 고려해야 할 점들이 많아졌음을 알 수 있습니다.
(지오파이트에서는 위에 언급한 행위가 전부 가능합니다.)
이처럼 현실에 가깝게 게임을 구현하려면 굉장히 많은 어려움이 있습니다. 개발을 하는 입장에서 신경써야 하는 부분이 많아진 것은 당연하고, 게임 기획적인 측면에서도 고려해야 할 요소들이 몇십 배는 많아지게 됩니다.
또한 고작 아이템 하나를 만든다고 하더라도, 무게, 값부터 시작해서, 불에는 얼마나 잘 타는지, 물에서는 얼마나 잘 녹이 스는지, 던졌을 때 공기에 의해 저항은 얼마나 받는지, 저주에 걸렸는지, 애초에 저주를 걸 수 있는지, 먹을 수는 있는지, 장착 가능한지, 강화가 가능한지, 가능하다면 강화했을 때 무엇이 얼마나 달라지는지 등등 수많은 요소들을 게임 플레이 전체에 어떤 영향을 줄지를 생각하며 제작해야 합니다.
또한 때로는 "현실적인 게임플레이 = 재미있는 게임플레이"가 아닌 경우도 있습니다. 게임이 지나치게 현실적이라 플레이어가 주기적으로 용변도 처리해야 하고, 손가락 하나하나마다 별도로 조작을 해 주어야 하고, 눈을 깜빡이는 횟수까지 플레이어가 지정해야 한다면, 이는 더 이상 재미있는 게임이라기보다는 불필요하게 복잡한 시뮬레이션이 되버리고 말 것입니다.
때문에 게임을 개발하며 저는 항상 재미를 현실성보다 높은 우선순위에 두고 개발했고, 얼마만큼의 현실성이 가장 재미를 줄 수 있을까를 계속해서 고민한 끝에 지금의 결과물에 도달하게 되었습니다.
지오파이트는 "Berlin Interpretation"에서 정의한 로그라이크 게임이 지향해야 할 가치들 대부분을 지향합니다.
www.roguebasin.com/index.php?title=Berlin_Interpretation
Random environment generation
지오파이트는 매 게임마다 최대한 다른 느낌을 주는 방향으로 제작 중입니다. 게임 내의 많은 요소들이 랜덤화(randomize)되며, 던전은 상당히 복잡한 절차생성 알고리즘을 통해 생성됩니다.
Permadeath
로그라이크 장르의 기본적인 규칙에 맞게 지오파이트 역시 한 번 죽으면 부활할 수 없습니다.
Turn-based, Grid-based:
지오파이트는 턴제이며, 이차원 그리드 위에 월드를 생성합니다.
Non-modal
지오파이트는 대부분의 상황에서 Non-modality를 지향합니다. 즉, 이 게임은 "상점 창", "대화 창" 같은 별도의 창의 사용을 최소화 하는 것을 지향합니다.
만약 게임에 물건을 구매할 수 있는 별도의 상점 창이 존재해, 물건을 구매하면 즉시 알아서 결제가 진행된다면 플레이어는 상점에서 아이템을 사고 파는 행위밖에 할 수 없게 됩니다.
상점에서 도둑질을 한다거나, 사지도 않은 물건을 사용한다거나, 상점의 물건을 부숴버린다거나, 상점 주인을 죽이는 등의 전략적 시도 자체를 할 수 없게 될 것이고, 이는 게임의 자유도 하락 및 전략의 단순화를 초래합니다.
때문에 지오파이트는 Non-modality를 지향하는 것으로 창의적이고 다채로운 플레이가 가능한 환경을 조성합니다.
Complexity
지오파이트는 "복잡한 게임 로직을 통한 전략의 다각화"를 추구합니다.
게임 내의 아이템, 몬스터 등은 서로서로 복합적인 상호작용을 주고받으며, 이러한 상호작용을 구현하기 위해 지오파이트 내에는 다양한 수치들과 상태이상들이 존재합니다.
Exploration and discovery
모험과 발견은 지오파이트를 플레이하는 데 있어서 중요한 요소로 작용합니다.
ASCII display
현재로써 지오파이트는 100% 아스키 타일(정확히는 유니코드)만을 사용합니다. 그래픽 타일을 적용한 버전을 잠시 개발했지만 여러가지 이유 때문에 아스키 타일을 사용하는 것으로 결정을 내렸습니다.
참고글: https://gamesmith.tistory.com/97?category=945745
단, 지오파이트는 일부분 고전적인 로그라이크가 지향하는 것과 다르거나, 더 발전된 가치를 지향합니다.
Monsters are exactly the same as player
정통 로그라이크에서도 몬스터와 플레이어 간의 구조적 차이를 최소화하려는 시도가 이루어지고 있지만, 지오파이트에서는 정통 로그라이크보다 훨씬 더 이러한 가치를 중요시합니다.
지오파이트는 궁극적으로 플레이어가 할 수 있는 모든 행위를 몬스터 혹은 AI 또한 할 수 있도록 만드는 것을 목표로 하고 있습니다.
No need for Hack'n'slash
지오파이트에는 몬스터 살상을 통한 경험치 획득 방식도 존재하지만, 이를 강제하지 않습니다. 지오파이트는 몬스터를 죽이고 레벨업하는 단조로운 플레이스타일에서 벗어나고자, 경험치 시스템에 새로운 방식으로 접근했습니다. 자세한 내용은 글 뒷부분에서 다루겠습니다.
Levelless
지오파이트에는 RPG 게임에서 흔히 볼 수 있는 플레이어 레벨이 존재하지 않습니다.
레벨은 플레이어가 어느 정도의 강함을 가지고 있는지를 하나의 수치만으로 파악할 수 있는 척도가 된다는 점에서는 도움이 되지만, 게임플레이 자체보다 레벨의 숫자 그 자체에 연연하는 결과를 초래할 수 있기 때문에 다양한 스타일의 플레이를 추구하는 지오파이트에서는 플레이어 레벨이 존재하지 않습니다.
Accessibility
지오파이트는 고전 로그라이크들에 비해 읽기 쉬운 UI와 어느 정도의 마우스 입력을 지원합니다. 또한 접근성을 높이기 위해 행동->오브젝트 선택과 더불어 오브젝트->행동 선택이 가능하도록 시스템을 구현했습니다. 행동->오브젝트 선택만이 가능한 넷핵에서는 조작키가 몇 십개가 넘어가는데, 지오파이트는 이와 달리 최대한 직관적이고 적은 수의 키로 조작할 수 있는 게임을 지향합니다.
Interaction between entities
고전적인 로그라이크는 엔티티간의 상호작용(ex. 몬스터간의 전투)을 최소화하고, 오직 플레이어와 세계와의 상호작용에 초점을 두었습니다. 하지만 지오파이트는 엔티티간의 상호작용을 적극적으로 지향합니다. 이는 앞서 말한대로 "살아있는 듯한 던전"을 만들기 위한 장치이며, 이 부분이 지오파이트와 다른 로그라이크들의 가장 큰 차이점이기도 합니다.
이러한 몬스터간의 전투는 전략적인 요소로도 중요하게 작용할 수 있습니다. 두 몬스터들이 싸우는 걸 이용해 어부지리를 노린다거나, 고의로 두 몬스터를 싸움을 붙여 그 사이에 자신은 도망을 가는 등의 다양한 플레이가 가능합니다.
Lore
스토리나 설정이 없는 대부분의 정통 로그라이크와는 다르게, 지오파이트는 구체적인 게임 내 설정이 존재하며, 이러한 설정들을 게임을 플레이하며 하나씩 접할 수 있습니다.
설정에 많은 신경을 쓴 이유는 크게 두 가지입니다
1) 처음 플레이하는 유저들에게 불친절한 고전 로그라이크들의 문제점을 완화하고자, 설정을 통해 플레이어에게 게임의 요소들을 간접적으로 설명하는 방식을 택했습니다.
2) 아스키 그래픽과 적절한 설정이 어우러진다면 플레이어의 상상력을 자극해 플레이어로 하여금 게임 내의 세계에 더 몰입하게 도울 수 있다고 판단했습니다.
Modernized Mecahnics
지오파이트는 정통 로그라이크에서는 찾아보기 어려운 사운드, 애니메이션과 같은 현대적인 요소들을 사용해 접근성을 낮추고 몰입감을 높였습니다.
현재까지 구현된 콘텐츠 (스포일러 주의)
(Alpha 2.2.1 버전 최종 수정)
아이템 (Items)
물약
회복의 물약 (Potion of healing)
마나 회복의 물약 (Potion of mana)
마비 물약 (Potion of paralysis)
수면 물약 (Potion of sleep)
생명체 탐지의 물약 (Potion of monster detection)
화염의 물약 (Potion of flame)
강산성 물약 (Potion of acid)
냉기의 물약 (Potion of frost)
맹독의 물약 (Potion of poison)
공중 부양의 물약 (Potion of levitation)
액화 개미 물약 (Potion of liquified ants)
주문서
혼란의 주문서 (Scroll of confusion)
운석 폭풍의 주문서 (Scroll of meteor storm)
번개의 주문서 (Scroll of lightning)
마법 광선의 주문서 (Scroll of magic missile)
굴착의 주문서 (Scroll of digging)
마법 지도의 주문서 (Scroll of magic mapping)
맹렬한 화염 광선의 주문서 (Scroll of scorching ray)
얼어붙는 빙결 광선의 주문서 (Scroll of freezing ray)
복종의 주문서 (Scroll of tame)
마법 강화의 주문서 (Scroll of enchantment)
감정의 주문서 (Scroll of Identification)
저주 해제의 주문서 (Scroll of remove curse)
순간 이동의 주문서 (Scroll of teleportation)
장착품 파괴의 주문서 (Scroll of destroy equipment)
증오의 주문서 (Scroll of hatred)
불화의 주문서 (Scroll of conflict)
소환의 주문서 (Scroll of summoning)
마법서
뇌격 마법서 (Lightning bolt spellbook)
소울 볼트 마법서 (Soul bolt spellbook)
상처 치유 마법서 (Cure wound spellbook)
매혹 마법서 (Mesmerize spellbook)
순간이동 마법서 (Teleport spellbook)
서적
'대도둑 레오파드의 소매치기 특강'이라고 적힌 책 (A book called 'Tips and tricks for thieves written by the Great Theif Leopard')
악마의 성서 (Satanic bible)
장착품 - 상체
천쪼가리 (Rags)
가죽 갑옷 (Leather armor)
철제 사슬 갑옷 (Iron chain mail)
철제 비늘 갑옷 (Iron scale armor)
철제 판금 갑옷 (Iron plate armor)
상인의 로브 (Merchant robe)
실크 드레스 (Silk dress)
태고의 거북 등껍질 (Primeval tortoise shell)
장착품 - 머리
철제 전투모 (Iron headpiece)
철제 투구 (Iron helmet)
철제 아멧 (Iron armet)
뿔 달린 투구 (Horned helmet)
장착품 - 하체
가죽 바지 (Leather pants)
가죽 장갑 하의 (Leather armored pants)
철제 장갑 하의 (Iron armored pants)
장착품 - 발
가죽 부츠 (Leather boots)
신속의 부츠 - 아티팩트 (Boots of haste - Artifact)
철제 부츠 (Iron boots)
장착품 - 팔
철제 건틀릿 (Iron gauntlet)
가죽 장갑 (Leather glove)
벙어리 장갑 (Mitten)
힘의 건틀릿 - 아티팩트 (Gauntlet of strength - Artifact)
장착품 - 망토류
적색 망토 (Red cloak)
청색 망토 (Blue cloak)
녹색 망토 (Green cloak)
엘프제 망토 (Elven cloak)
후드가 달린 망토 (Hooded cloak)
보호의 망토 - 아티팩트 (Cloak of protection - Artifact)
장착품 - 아뮬렛
쿠가의 아뮬렛 - 아티팩트 (Amulet of Kugah - Artifact)
지적 각성의 아뮬렛 - 아티팩트 (Amulet of brilliance - Artifact)
감각 향상의 아뮬렛 (Amulet of sensitivity)
텔레파시의 아뮬렛 (Amulet of telepathy)
수중 호흡의 아뮬렛 (Amulet of underwater breathing)
묵언 수행의 아뮬렛 (Amulet of monastic silence)
카리스마의 아뮬렛 - 아티팩트 (Amulet of charisma - Artifact)
면역력 저하의 아뮬렛 (Amulet of immunity loss)
반마법의 아뮬렛 (Amulet of magic aversion)
장착품 - 반지
내적 평화의 반지 (Ring of inner peace)
물의 반지 (Ring of water)
땅의 반지 (Ring of earth)
하늘의 반지 (Ring of sky)
재주의 반지 - 아티팩트 (Ring of dexterity - Artifact)
활력의 반지 - 아티팩트 (Ring of constitution - Artifact)
불면증의 반지 (Ring of insomnia)
무술가의 반지 (Ring of martial artist)
실명의 반지 (Ring of blindness)
장착품 - 근접 무기
나무 단검 (Wooden dagger)
철제 단검 (Iron dagger)
황동 대검 (Brass dagger)
엘프제 단검 (Elven dagger)
스칼펠 (Scalpel)
숏소드 (Shortsword)
엘프제 검 (Elven sword)
롱소드 (Longsword)
선브링거 - 아티팩트 (Sunbringer - Artifact)
소드 스틱 (Swordstick)
도끼 (Axe)
토마호크 (Tomahawk)
전투도끼 (Battle axe)
스톤퓨리 - 아티팩트 (Stonefury - Artifact)
단조용 망치 (Forging hammer)
육척봉 (Quarterstaff)
통나무 곤봉 (Giant wood club)
철퇴 (Morning star)
창 (Spear)
할버드 (Halberd)
하트피어서 - 아티팩트 (Heartpiercer - Artifact)
장착품 - 방패류
나무 방패 (Wooden shield)
은 방패 (Silver shield)
백금 방패 (Platinum shield)
철제 방패 (Iron shield)
섭취품
시체 (Corpse)
각 액터 별로 섭취 시 고유의 효과를 가진 시체가 드랍되며, 포만감, 부패 시간 등이 개별적으로 설정되어 있습니다.
비상식량 (Ration)
린톨 (Lintol)
필라포티 (Fillapoty)
케토니스 (Kettoniss)
보석류
다이아몬드 (Diamond)
루비 (Ruby)
에메랄드 (Emerald)
사파이어 (Sapphire)
싸구려 유리 조각 (Worthless piece of glass)
하양, 빨강, 초록, 파랑색이 존재합니다.
도구류
부식 방지의 왁스 (Rustproof wax)
그을림 방지의 왁스 (Fireproof wax)
기타
독성 점액 (Toxic goo)
샤인 - 화폐 (Shine - cash)
마법 및 기술 (Abilities)
뇌격 (Lightning bolt)
분광 광선 (Spectral beam)
소울 볼트 (Soul bolt)
오크 족장의 부름 (Call of the orc lord)
상처 치유 (Cure wound)
매혹 (Mesmerize)
훔치기 (Steal)
액터 (Actors)
@
플레이어 (Player)
상인 (Shopkeeper)
a
개미 (ant)
불개미 (Fire ant)
스파크 개미 (Volt ant)
b
박쥐 (Bat)
c
새끼고양이 (Kitten)
고양이 (Cat)
큰 고양이 (Large cat)
d
강아지 (Puppy)
개 (Dog)
큰 개 (Large dog)
케르베로스 (Cerberus)
e
떠다니는 눈 (Floating eye)
f
피라냐 (Piranha)
뱀장어 (Eel)
전기뱀장어 (Electric eel)
i
파리 (Fly)
거대 말벌 (Giant wasp)
j
검정 덩어리 (Black jelly)
l
엘프 약초술사 (Elf herbalist)
엘프 암살자 (Elf assasin)
엘프 전사 (Elf fighter)
n
님프 (Nymph)
o
산성 구체 (Sphere of acid)
s
깡충거미 (Jumping spider)
가이온 (Gaion)
w
지렁이 (Earthworm)
구더기 (Maggot)
B
불곰 (Brown bear)
D
새끼 스피어혼 드래곤 (Baby spearhorn dragon)
새끼 아머 드래곤 (Baby armored dragon)
E
불의 정령 (Fire elemental)
얼음 정령 (Ice elemental)
땅의 정령 (Earth elemental)
융해의 정령 (Acid elemental)
맹독의 정령 (Poison elemental)
번개 정령 (Lightning elemental)
F
붉은 선지자 (Red prophet)
H
유니콘 (Unicorn)
I
수다쟁이 괴물 (Chatterbox)
K
크라켄 (Kraken)
M
새끼 불사조 (Baby phoenix)
불사조 (Phoenix)
O
오크 정찰병 (Orc patrol)
오크 전사 (Orc warrior)
오크 대장장이 (Orc blacksmith)
오크 족장 (Orc lord)
오크 주술사 (Orc shaman)
R
태고의 거북 (Primeval tortoise)
T
트롤 (Troll)
자이언트 (Giant)
Y
예티 (Yeti)
바이옴 (Biomes)
돌무더기 (Rocky dungeon)
석영 동굴 (Crystal cavern)
숲 (Forest)
사막 (Desert dungeon)
전쟁터 (Warzone)
고대 유적 (Ancient ruins)
지형 (Terrains)
던전 챔버 (Dungeon chamber)
전장 (Battlefield)
괴물 둥지 (Monster lair)
참나무숲 (Oak tree forest)
선인장 지대 (Cactus field)
폭발 챔버 (Explosion chamber)
평야 (Grassfield)
함정 필드 (Trap field)
창고 (Storage)
큰 구덩이 (Large pit)
큰 구멍 (Giant hole)
바다 (Ocean)
호수 (Lake)
피라냐 호수 (Piranha lake)
늪지대 (Swamp)
잡동사니 상점 (General shop)
포션 상점 (Potion shop)
무기 상점 (Weapon shop)
갑옷 상점 (Armor shop)
주문서 상점 (Scroll shop)
쿠가의 성소 (Chamber of Kugah)
보호받는 보물 (Guarded treasure)
제단의 방 (Altar chamber)
지형지물 (Semiactors)
불 (Fire)
가시 함정 (Spike trap)
화염 함정 (Flame trap)
고드름 함정 (Icicle trap)
염산 분사 함정 (Acid spray trap)
독침 함정 (Poison spike trap)
소닉붐 함정 (Sonicboom trap)
폭발 함정 (Explosion trap)
제단 (Altar)
참나무 (Oak tree)
선인장 (Cactus)
닫힌 문 (Closed door)
열린 문 (Opened door)
잠긴 문 (Locked door)
강철 사슬로 잠긴 문 (Chained door)
대형 나무 상자 (Large wooden chest)
황금 상자 (Golden chest)
게임에 혹시라도 관심이 생기시거나 궁금하신거 있으시면 아무 때나 댓글이나 이메일로 알려주세요!
'게임 제작 > Geophyte (2020~2021)' 카테고리의 다른 글
Geophyte 알파 버전 릴리즈! (4) | 2021.10.08 |
---|---|
[Geophyte] 버그 원인을 파악하기까지의 사고의 흐름 (2) | 2021.09.08 |
[Geophyte] 파이썬? (1) | 2021.05.15 |
[Geophyte] 사진으로 보는 개발과정 (0) | 2021.05.15 |