사용자:Senouis/리버티게임엔진

리버티게임, 모두가 만들어가는 자유로운 게임
< 사용자:Senouis
Senouis (토론 | 기여)님의 2023년 10월 4일 (수) 11:37 판 (→‎Xash3D-Libetygame 상세)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

리버티게임에 필요한 자바스크립트 게임 SDK는 다음과 같은 조건이 필요하다. 대충 요약하자면 골드 소스 엔진과 호환되는 Xash3D 웹 포트 버전을 기반으로 미디어위키 사이트 구조에 맞게 편집하는 것이다.

기본[편집 | 원본 편집]

  • 일단 Xash3D 컴파일 환경 복원에 성공하였으므로 Legacy Xash3D 웹 포트를 CDN을 통해 GitHub에서 코드를 가져오는 방식으로 구현
    • 해당 프로젝트가 오래 전에 Xash3D 프로젝트에서 분기되었으므로 현재 Xash3D 버전과 호환성이 좀 낮음. 그러나 실 사용에 문제는 없음
      • MDL 파일은 하위 호환이 잘 되어 밸브의 소스 엔진에서 쓰인 모델을 적은 수고를 들이고 그대로 사용할 수 있음 -> 게리 모드 등의 소스 엔진 게임의 스팀 창작 마당에 올라온 모델링이나 GameBanana 같은 커뮤니티의 공개 애셋을 가져와 애셋 부족 문제를 해결 가능
    • Vue.js의 기능은 이 엔진에서만 사용하도록 할 것(Vue의 방대한 기능을 다 미디어위키로 가져오는 과정에서 발생할 수 있는 잠재적 문제 예방)
  • Xash3D 포팅과는 별개로 2024년 진행할 에디터 프로젝트를 위해 Xash3D와 유사한 구조의 에디터 가젯을 제작
    • 엔티티 / 게임 모드 객체 설계는 Xash3D에 맞춤
    • Xash3D는 아직 웹 버전에서는 P2P 통신 기반 리슨 서버를 돌릴 수 없다. 따라서 이 부분은 하반기 P2P 통신 구현 작업을 진행할 때 해당 기능을 추가로 가져오도록 구조를 짜야 한다.
  • 에디터의 경우 미디어위키 문서를 FGD 파일처럼 읽어서 만드는 웹해머(가칭) 멥 에디터의 제작에 대부분의 시간을 투자
    • webXash처럼 HTML5 포맷의 오픈소스 해머 호환 에디터가 있으면 그것을 포팅하는 것을 대체 목표로 삼음
  • Ctrl+W나 ESC 등 키보드 입력에 따른 브라우저 동작을 철저하게 통제

Xash3D-Libetygame 상세[편집 | 원본 편집]

  • 최대한 경량화하는 것이 포팅의 최종 목표
  • 이 엔진은 xash.js에서 대부분의 엔진 기능을 처리하나, node.js에서 돌아가는 것을 전제로 한 구조를 미디어위키 엔진 구조에 맞게 편집해야 한다. 따라서 중간에 변환 레이어를 가젯 기능으로 처리해야 한다(애석하게도 lua 모듈을 써서 프레임워크를 통째로 만드는 것은 더 어협다. 이쪽은 사이트 UI 기능 / 미디어위키 문서 기능 확장으로 제한하는 것이 좋겠다)
    • webXash의 경우 index.html -> index-(모듈 hash 코드).js -> node.js 용 client.js + server.js가 도는 상태에서 xash.js와 menu.js를 호출하며 초기 설정 화면 사용 -> 게임 구동시 그에 맞는 게임 js 파일 구동 구조로 되어 있으므로 이를 Gadget으로 각각 이식하는 것은 어렵다. 여기서 2가지 방법 중 하나를 택하게 한다.
      • Node.js의 부트스트랩을 리버티게임 Xash3D가 필요할 때마다 Gadget으로 모사
      • npm이나 pnpm 같은 패키지 관리자의 빌드/배포를 통해 개발하는 과정을 미디어위키가 바로 인식 가능한 결과가 나오는 과정으로 변경
  • 2D 게임의 경우 menu.js의 기능만 사용하고 3D 기능을 사용할 때 Xash3D를 같이 사용하도록 변경한다.
    • 2D 게임은 원래 UI 기능 js 파일이나, 2D 게임 제작에도 사용 가능. 다만 애니메이션 시퀀스 기능을 추가할 필요가 있음
    • Xash.js의 경우 게임 js 파일을 로딩할 경우 처음부터 3D Viewport의 생성을 시도하기 때문에 2D 게임 성능 최적화에 불리하여 최대한 menu.js의 기능을 빼내야 한다.
  • 현재 존재하는 리버티게임의 각종 입력 모듈(게임패드 진동 지원 등)이 작동되어야 한다.
  • 계정 시스템과의 연동은 다음과 같다.
    • 리버티게임 계정 이름을 엔진 내 유저 닉네임으로 정한다 - 인식하는 작업은 Yes check.svg완료, 유니코드를 써서 한글 닉네임을 표시하도록 추가 작업할 필요 있음
    • 사용자 문서 이름 공간 내에 json 형태로 세이브 파일을 저장하거나 Localstorage에 저장하는 식으로 사용자 데이터 저장/로드 구현 - 작업 예정
  • VTFLib 추가 - 작업 중