FVTT에도 좀 더 다양한 시스템이 생기길 바라는 마음으로 써 봄.


FVTT는 나온지 그리 오래되지 않았기 때문에 지원해주는 룰이 많지 않음.


쓰는 사람 대부분은 댄디를 굴리고, 댄디 전용 모듈들만 잔뜩 나오고 있는 상황임.


만약 나처럼 "FVTT를 사용하고 싶은데 원하는 룰이 없다?" 라는 생각이 드는 사람들은 이 글을 보고 도전해 보면 좋을 것 같음.


최근에 나온 시스템 중에서는 Sandbox라고 GUI로만 만드는게 나왔다고 하는데, 나는 안써봤으니 잘 모름.


고로 일반적으로 사용되는 자바스크립트, HTML, CSS 조합으로만 만들거임.



1편에서는 시스템의 구조를 간단하게 알아볼거임.


먼저 world building 시스템을 받아주셈.


처음부터 시스템의 각 구성을 다 만들기는 힘드니깐, 기능이 별로 없는 기본 시스템을 받아서 수정을 해나갈거임.




모든 시스템은 중요한 두 가지 파일을 가지고 있음. 


system.json과 template.json 파일이 바로 그거임.


system.json 파일은 시스템의 기본적인 정보를 저장하고 있음. 

각 시스템의 이름, 설명, 버전 등등의 메타 정보를 가지게 됨.


{

  "name": "worldbuilding",

  "title": "Simple World-Building",

  "description": "A minimalist game system with v.ery simple Actor and Item models to support free-form system agnostic gameplay.",

  "ve.rsion": 0.36,

  "minimumCoreV.ersion": "0.5.6",

  "compatibleCoreV.ersion": "0.5.7",

  "templateVe.rsion": 2,

  "author": "Atropos",

  "esmodules": ["module/simple.js"],

  "styles": ["styles/simple.css"],

  "packs": [],

  "languages": [],

  "gridDistance": 5,

  "gridUnits": "ft",

  "primaryTokenAttribute": "health",

  "secondaryTokenAttribute": "power",

  "url": "https://gitlab.com/foundrynet/worldbuilding/",

  "manifest": "https://gitlab.com/foundrynet/worldbuilding/raw/master/system.json",

  "download": "https://gitlab.com/foundrynet/worldbuilding/-/archive/release-036/worldbuilding-release-036.zip",

  "license": "LICENSE.txt"

}


대충 영어를 해석해보면 무슨 뜻인지 알 수 있을테니, 당장 만들 때 필요한 몇 가지만 짚어서 설명함.

  • "name": 시스템이 저장되는 이름. 이 이름은 띄어쓰기가 들어가 있으면 안됨. 이 이름이 해당 시스템이 들어가 있는 폴더 이름이어야 함.
  • "title": 시스템의 이름. 아무렇게나 지어도 됨.
  • "minimumCoreV.ersion": 이 시스템을 설치하기 위해 필요한 최소한의 버전을 정의함. // 점이 들어간게 아니라 그냥 버전임.
  • "compatibleCoreV.ersion": 이 시스템을 돌리기에 적합한 버전을 정의함. // 점이 들어간게 아니라 그냥 버전임.
  • "esmodules": 실행할 자바스크립트 파일을 정의하는데, 나중에 설명할거임.
  • "styles": 사용할 CSS 파일을 정의함.
  • "packs": 이 시스템에 들어갈 컴펜디움 파일들을 정의함.
  • "languages": 다국어 지원임.
  • "gridDistance": 한 칸당 거리가 얼마인지.
  • "gridUnits": 거리 단위가 무엇인지





template.json 파일은 만들고자 하는 시스템의 각 요소들을 설정하게 됨.

Actor와 Item 등의 요소들에게 타입을 줘서 다양한 종류의 Actor들, 다양한 종류의 Item들을 가질 수 있게 도와줌.


Actor라면 정하는 타입에 따라 PC도 될 수 있고, 몬스터도 될 수 있고, NPC도 될 수 있음.

Item이라면 타입에 따라 스킬이 될 수도 있고 소비 아이템이 될 수도 있고 장비 아이템이 될 수도 있음.


이런 식으로 타입을 구분하고 각 타입에 필요한 정보가 무엇인지 정의하는 파일이 바로 template.json임.


{

"Actor": {

  "types": ["character"],

  "character": {

    "biography": "",

    "health": {

      "value": 10,

      "min": 0,

      "max": 10

    },

    "power": {

      "value": 5,

      "min": 0,

      "max": 5

    },

    "attributes": {}

  }

},

"Item": {

  "types": ["item"],

  "item": {

    "description": "",

    "quantity": 1,

    "weight": 0,

    "attributes": {}

  }

}

}


보면 Actor랑 Item 둘이 있는 것을 볼 수 있음.

Actor는 타입으로 "character"를 가지고 있고, 밑에 "character" 부분에 각 캐릭터가 필요로하는 요소들(biography, health, power, attributes)이 정의되어 있음. 


Item은 타입으로 "item"을 가지고 있고, 마찬가지로 "item"에는 아이템을 정의하기 위해 필요한 요소들(description, quantity, weight, attributes)이 정의되어 있음.



결국 시스템을 본격적으로 만들기 전에 건드릴 것은 딱 이거 두 개임.


1. system.json과 폴더 이름을 수정한다.

2. 시스템을 만들기 위해 필요한 요소들을 정리한다. Actor랑 Item을 중심으로 무엇 무엇이 필요한지 생각해 본 뒤, template.json에 정의한다.


엄청 복잡해보여서 도전하려는 사람이 있는지는 잘 모르겠지만,

도전할 맘이 있으면 도와줄테니 덧글 남기셈.