목표
- 마인크래프트 벨스토리 서버 리뉴얼
- 2011년부터 2017년까지 "베타 1.7.3 ~ 정식 1.6.4" 버전으로 운영했으나, 현재와 많은 차이점이 있을 것이므로 실제 게임 플레이를 하면서 변환점에 대한 학습
- 과거의 CraftBukkit이나 SpoutCraft가 아닌, Fabric으로 현대적인 환경에서 제한없는 기능 개발이 목표
- 단순 모드로 끝나는 것이 아닌, 로그인 및 배포용 런처, 웹 사이트와 게임 서버간의 연계까지 복합적인 시스템 구축이 목표
- JAVA 에디션 기반 제작 (타 에디션은 고려대상이 아님)
- 매일은 아니겠지만 생각날 때 작업 진행사항 업데이트 예정
- 현생이 버틸 수 없을만큼 바쁘고 지치면 프로젝트가 지연되거나 조기 종료될 수도 있음
예상 컨텐츠
- 디아블로식 RPG 시스템 (레벨, 스탯, 스킬, 능력 기반 아이템, 소켓 아이템 등)
- 액티브, 패시브 방식의 스킬 시스템 (POE 같은 방식 예상)
- 커스텀 바이옴 및 커스텀 전초기지 같은 던전 시스템
- 보스 몬스터 및 보스 전용 월드 구현 (포탈로 보스룸에 이동해서 플레이어들이 함께 공략하는 방식)
- 파티 시스템 구현 (파티끼리 공격불가, 서로 간에 순간이동 등 지원)
- NPC 대화기능 구현 (온갖 기술이 복합적으로 들어가는 기능이라 가장 힘들 것으로 예상하는 것 중 하나이고 불가능할지도 모름)
- 아이템 옥션 기능 구현 (아이템 게시, 일시결제, 경매 방식 등)
- 웹 사이트와의 연계 기능 (아이템 옥션, 캡처한 이미지 바로 업로드, 게임 내 공지 알림, 옥션 신상품 게시 알림 등)
- 좀 더 편리한 부동산 시스템 (벨스토리 v1.0 기능 + GUI를 겸한 쉬운 매매 기능)
- 팀 대항 FPS 게임 (벨스토리 v1.0의 그것)
- 공중섬에서 블록을 부수는 엔더드래곤을 피해서 살아남는 게임 (벨스토리 v1.0의 그것)
연구대상 (검토 완료된 항목은 체크하고 항목 전체 수는 아이디어에 따라 계속 증가할 예정)
주제 내용
Fabric 기본
  • 프로젝트 생성
  • 간단한 인터랙티브 테스트
  • 서버 및 클라이언트 모드 적용 테스트
엔티티
체력바 표시
  • LivingEntity의 머리 위에 체력바 표시
  • 체력바는 background, progress, 숫자표기 등으로 세분화
커스텀
광석 추가
  • 다이아몬드보다 상위 호환인 광석 추가
  • 광석과 관련된 원석, 블록, 도구 및 방어구 등을 같이 추가
커스텀
데미지 체계
구현
  • 기존의 무기/방어구에 따른 데미지 체계 무시 기능
  • 무기/방어구 능력치에 따른 LivingEntity 능력치 재계산
  • 계산된 능력치로 공/방시 데미지 적용
디아블로2식
아이템 체계
구현
  • 무기 및 방어구에 RPG 방식의 능력치 부과
  • 각종 능력치 정리 (공격력, 방어력, 명중률, 회피율, 저항력 등...)
  • 능력치에 따른 형용사, 명사 네이밍 정리 (예를들어 "우수한 수습생의 평범한 검" 같은 네이밍 가능)
  • 노멀 아이템의 초기 퀄리티 정리 ("부서진", "저급한", "평범한", "우수한", "완벽한" 5단계 예상)
  • 마법이 적용된 아이템의 구성 정리 필요 (매직, 레어, 세트, 유니크 등급을 예상하고 매직 등급의 아이템이 버려지는 일이 없겠금 밸런스 조정 필요)
  • 소켓 아이템 기능 추가 (보석을 장착해서 성능향상 및 룬을 장착해서 룬워드 아이템으로 변경 기능)
스킬 시스템
구현
  • 파티클 제어 테스트
  • 커스텀 3D모델 출력 테스트
  • 스킬 트리를 위한 HUD 연구
커스텀 블록
추가
  • 방향성 있는 블록 모델링 연구
  • 임의로 만든 블록을 서버 내부에서 정상작동 하도록 개발 (Mojang이 싫어하는 의자나 식탁 등은 필수 개발)
커스텀 바이옴
추가
  • 디아블로의 액트 같이 지정된 블록으로 구성된 단일 바이옴 구성 (네더월드가 아니라도 네더월드 같이 꾸밀 수 있음)
  • 월드 내부에 전초기지 같이 미리 제작된 건물을 배치할 수 있는 기능 (던전이나 군락 등 개발 가능)
  • 미리 저장해 둔 프리셋 블록세트 사용법 검토 (건축 월드용)
각종 3D 및
효과 테스트
  • 효과 엔티티 주변을 회전하는 육각 투명 기둥 (파랜드택틱스의 레저렉션 마법 같은 느낌) 엔티티 주변을 회전하는 칼 모양이나 방패 모양 (버프 효과) 엔티티 발 아래에서 회전하는 마법진 (워크래프트3의 그것과 같은 느낌) 엔티티 머리 위에서 움직이는 버프 아이콘 (워크래프트3의 그것과 같은 느낌) 엔티티 전면에서 회전하는 마법진 (마법 공격용) 메테오 지면충돌 효과 (벨스토리 v1.0의 운석낙하 효과 + 3D랜더링 효과 추가 목표) 엔티티 주변 얼음 효과 (일시적인 얼리기 관련 마법용, 해제될 때 얼음이 깨지는 파티클과 연계 필요) 블록을 탄환처럼 던질 수 있는 효과 (록 블라스트 등 물리마법 구현 가능, 블록을 복합적으로 뭉치면 더 큰 탄환 생성 가능)
  • 광선 위치 A-B를 바로 이은 광선 그리기 (적층형 랜더링에 기반한 노란색 색상 계통) 위치 A-B 사이에 랜덤 노드를 추가해서 번개줄기 느낌의 광선 그리기 (적층형 랜더링에 기반한 파란색 색상 계통, 정전기 파티클과 연계 필요) 위치 A-B 사이의 화염기둥 (파열광선이나 드래곤 브레스 등으로 활용 가능, 난이도 극상일 듯)
  • 엔티티 모델링 (이 중에 1~2개 정도만 구현되어도 운영 시작은 가능할 듯) 산적 고블린 오크 오거 트롤 리저드맨 와이번 드래곤
  • 파티클 (광원 효과를 사용하기 위해 이미지가 아닌 3D 랜더 방식이 있는지 확인 필요) 정전기 모양 빛나는 오브 모양 얼음가루 모양
인증 관련
  • GUI 형식의 서버 접속 이후 로그인 UI 구현 (가입 유도를 위한 웹 사이트 링크 첨부)
  • 비인증 서버로 운영 예정이고, 별도의 정품 유저여부 체크 기능 구현
  • 정품 유저는 본인의 스킨을 표현할 수 있도록 기능 구현
  • 비정품 유저와 정품 유저의 계정 충돌 시, 비정품 유저의 계정 변경 방안 검토
접속 런처
구현
  • 기존 런처의 OAuth 체계 파악 및 토큰 생성기능 개발
  • .NET Framework 4.7.2 기반의 런처 프로그램 개발
  • 정품 유저, 비정품 유저의 개별 로그인 방식 개발
  • 기존 게임과 충돌없는 서버 전용 환경 자동업데이트 기능 개발
프록시 서버
테스트
  • Velocity 등 프록시 서버를 이용한 멀티 월드 서버 테스트 (성능을 위한 필수 검토 항목)
  • 플레이어 정보 이전 검토 (RDB 기반 안전한 방식 사용)
  • 대화 공유 기능 검토 (Redis 구독 기반 구현)
  • 접속자 공유 기능 검토 (Redis 구독 기반 구현)
  • 로비에서의 접속자 수 표현 검토
서버
웹 사이트
개발
  • 레이아웃 정의 및 디자인 개발
  • 기본 로그인 체계 구현
  • 게시판 체계 구현
  • Microsoft OAuth 연동 정품 인증 구현
  • 서버와 웹 사이트 간의 대화 채널 구현
  • 모바일 고려 개발
작업 일지 (매일 소소하게 1개씩이라도 진행하는 것이 목표)
연월일 내용
2025년 04월 28일
  • GUI 테스트 NPC를 우클릭하면 서버 기반 명령으로 GUI 창이 뜸 버튼을 누르면 다이아몬드 1개를 받을 수 있는 기능을 구현함 향후에 인벤토리를 제어해 볼 필요가 있음
2025년 04월 26일
  • NPC에 AI 적용 #2 지정된 장소에서 멀어지면 다시 지정된 장소로 돌아가는 기능 구현 중 생각처럼 잘 안 됨 무한히 이동하는 AI를 추가해서 테스트 진행 중
2025년 04월 25일
  • NPC에 AI 적용 #1 주변 이동이나, 플레이어를 바라본다던지 등 행동함 플레이어나 몬스터가 공격했을 때 반격할 수 있도록 설정 플레이어에게 반격하면 플레이어에게 데미지를 안 주는 버그가 있음 공격 모션을 적용했으나, 몬스터 대상으로 테스트 했을 때 모션을 취하지 않았음
2025년 04월 24일
  • 커스텀 NPC 추가 (플레이어 기반) 실제 플레이어 엔티티를 활용한 NPC 추가 테스트 스킨, 이름, 상호작용 등 테스트 수행
2025년 04월 23일
  • 좌표 A-B에 대한 선그리기 테스트 (광선 및 번개 줄기 완성) 폴리곤이나 텍스처가 아닌, 디버그용 실선을 이용한 좌표 위치 검토 위주의 테스트 시작 목표점은 16칸 내의 블록 또는 엔티티를 감지해서 통과되지 않고 끝점을 찾을 수 있도록 조치 3인칭 시, 시작점은 플레이어의 1칸 앞에서 시작되도록 조치 (마법진 바로 앞부터 출발) 1인칭 시, 중앙에서 출발하면 선이 안 보이므로 머리 정 중앙 위에서 목표점까지 표현 #1 마무리로 실제 광선으로 보이는 레이어드 폴리곤을 적용해서 그럴싸한 빛 기둥을 만들 수 있었음 #2 마무리로 광선 중간에 노드를 추가해서 랜덤 값을 줬더니 번개 줄기가 만들어졌음 1인칭 및 3인칭 뒷 시야일 때는 움직임이 있을 때 시작점이 흔들리는 문제 있음 클라이언트만 테스트 했는데, 서버에서의 구현 및 플레이어를 포함한 모든 엔티티에서 연산을 했을 때의 성능 테스트 필요 (자원 사용량이 거의 없다면, 몬스터도 같은 방식으로 마법 사용 가능해짐)
2025년 04월 22일
  • 사각형 텍스처 베이스 회전 기둥 테스트 어제 제작한 육각 투명 기둥에서 텍스처를 추가하는 방법 검토 텍스처에 애니메이션 효과를 줄 수 있음 회전 속도를 느리게 바꾸니까 더 고급스러워짐 더 고퀄리티의 폴리곤 생성 가능해짐
2025년 04월 21일
  • 월드 머신 프로그램의 존재 확인 대형 자연 지도를 제작할 때, 일일이 작업하지 않더라도 기본 모습을 잡아줄 수 있는 프로그램 월드 작업 후, 블록벤치 프로그램과 연계해서 게임 데이터로 변환하는 것 같음 자동 바이옴이 아닌, 특정 이벤트 구간을 만들기 좋은 기능일 듯 함 (예를 들어 화산 섬이 있고 정상에 보스몹이 있는 느낌)
  • 육각형 투명 회전 기둥 테스트 플레이어 주변에 2초에 걸쳐서 등장했다가 사라지는 투명 기둥 테스트 적절한 효과음을 곁들여서 버프효과로 사용하면 좋을 듯함 (파랜드택틱스 레저렉션 마법 같은) 3D 모델을 그릴 때 필요한 감각을 익힐 수 있었음 (광선을 그리는데 영감을 얻음)
  • 음식 아이템에 대한 관심 생김 회사 직원으로부터 맥도날드 이벤트에 대한 소식 공유받음 (영화 개봉 관련 이벤트) 감튀 박스에 "감자 + 석탄 = 감튀"라는 작업대 조합법이 그려져 있었음 신박한 시스템도 중요하지만, 이런 소소한 것들도 잊지 않고 컨텐츠로 제작해야겠다 싶었음
2025년 04월 20일
  • 블록벤치 프로그램 테스트 연습이 필요할 듯... 그런데 일반적인 3D모델링 프로그램보다는 쉬워보였음
  • 플레이어 주변에 훌라후프 같은 링을 그림 링은 z축으로도 움직여서 단순 회전이 아닌, 위/아래 운동도 포함해서 움직임
  • 양면 랜더링 관련 폴리곤이 한 쪽면만 랜더링 되게 하거나, 혹은 양 쪽면 전부 랜더링 되게 하거나 하는 기능의 함수 확인
  • 도트 딜에 대한 고찰 게임의 틱에 따라서 데미지가 무시되는 시점이 있음 기존 체계로 도트 딜이 들어가면 정작 직접 공격할 때의 딜이 무시될 위험이 있음 도트 딜은 데미지가 아닌, 체력을 직접 조정하는 것도 하나의 방식이라 생각해 봄 체력이 마이너스가 되면 직접 데미지로 깔끔한 마무리 도트 딜은 정전기나 화상 개념인, 주기적으로 이뤄지는 자동 공격 등에 사용 가능
2025년 04월 08일
~
2025년 04월 19일
  • 광석, 원석, 주괴, 도구, 무기, 방어구 추가 테스트 대충 광석 3개에 대해 작업해 봄 (다이아몬드 상위 호환 개념) 노가다의 산물... (하나의 광석 추가에 수십개의 파일을 제작해야 해서 일이 많음, 특별한 경우가 아니면 추가로 하지 않을 듯)
  • 머리 위의 체력바 테스트 첫 3D 표현 작업 엔티티의 머리 위 좌표를 맞추느라 고생함 예제 소스의 낚시로 또 고생함 (공식 문서의 내용이 전부 다 맞는 것은 아닌 듯)
  • 데미지 체계 기본 구현 어떤 무기나 혹은 맨손으로 공격해도 데미지 1로 고정해 둠 추후에 엔티티의 NBT 태그 기반으로 데미지 재산정하면 됨
  • 날아가는 Polygon 테스트 멀티 환경에서 테스트 완료 테스트 후, 탄환으로 만들어보려고 하다가 비효율적이라 생각해 폐기 (탄환은 기존에 있던 ProjectileEntity를 활용하는 것이 효율적이라 생각함) 굳이 커스텀 모델을 사용하고 싶으면 화살처럼 구현하거나 혹은 투명 ProjectileEntity에 좌표를 맵핑하는 식으로 하면 좋을 듯 함
  • 아이템의 기본 옵션 제거 방법 검토 기본 공격력이나 공격 속도, 방어력 등 제거 제거 방식은 파악했으나 매끄럽지 않은 방법임 항시 전체적으로 모든 아이템에 대해 적용될 수 있도록 하는 방법이 필요함
  • 아이템의 커스텀 NBT 태그 주입방법 검토 방식은 쉬웠으나, 주입하려는 데이터를 제대로 정리해서 해야할 듯 주입된 아이템을 배포하고나면, 나중에 수정하기 힘들어짐 (월드의 모든 인벤토리를 검색해야 하니...) 아이템별로 식별자를 두고, 그걸 DB에서 관리하는 방식도 괜찮을 듯 (모든 아이템 이동에 대한 추적 기록, 서버 최강 아이템 소개 및 소유자 공개 등 가능) 기본 인챈트 테이블이나 모루 등은 삭제하거나 기능 재정의가 필요해보임
  • Renderer 깊이 관련 폴리곤이 블록에 가려지거나 혹은 가려지지 않거나 할 수 있게 하는 함수 확인
2025년 04월 07일
  • Fabric 기반으로 새로이 연구 시작 추억에 잠겨 솔플 게임을 하다가 시작하게 됨