최근 수정 시각 : 2021-04-11 23:16:53

스타바운드/모딩

파일:상위 문서 아이콘.svg   상위 문서: 스타바운드
파일:Starbound_Logo.png
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-11px;margin-top:-6px;margin-bottom:-7px"
등장 종족파일:external/starbounder.org/Apex_Icon.png
에이펙스
파일:external/starbounder.org/Avian_Icon.png
아비안
파일:external/starbounder.org/Floran_Icon.png
플로란
파일:external/starbounder.org/Glitch_Icon.png
글리치
파일:external/starbounder.org/Human_Icon.png
인간
파일:external/starbounder.org/Hylotl_Icon.png
하이로틀
파일:external/starbounder.org/Novakid_Icon.png
노바키드
파일:external/starbounder.org/Penguin_Icon.png
기타 종족
세계관 환경 마을 / 던전 아웃포스트 몬스터 /보스
등장인물 문서(구판) 퀘스트 미션
아이템 블록 자원 가구 제작대
도구 무기 장비 / 패션 소모품
기타
항목
우주 정거장 우주선 메크 식민지 건설
테크 커맨드 OST 도전과제
플레이 팁 모드 / 모딩 베타 테스트
모드 Frackin' Universe(FU 모드)
}}}}}}||

1. 모딩은 어렵지 않습니다.2. 모딩에 앞서3. 데이터 언팩
3.1. Windows의 경우
4. 모딩
4.1. 모드 폴더 만들기4.2. 바닐라 파일 편집하기(기초)4.3. 바닐라 파일 편집하기(op 문법 사용하기)
4.3.1. "add"4.3.2. "remove"4.3.3. "replace"4.3.4. "move"와 "copy"4.3.5. 적용
4.4. 바닐라를 넘어서
5. 커스텀6. 패킹

1. 모딩은 어렵지 않습니다.

스타바운드는 언어로 JSONLua를 사용합니다.
물론 일일이 스크립트를 짜서 새로운 아이템 등 을 만드는 건 어렵지만
단순히 데이터 파일의 숫자만 바꾸는 식으로도 충분히 모드를 만들어 즐길 수 있습니다.

2. 모딩에 앞서

우선 텍스트 편집기가 필요합니다. 데이터를 읽는 면에서는 물론 수정까지 해야 되기 때문에 기존에 있는 메모장이나 워드로는 어렵습니다.
다음 중 하나를 받아보세요.
Windows
Linux
Mac OS
Windows,Linux,Mac OS 모두 가능

3. 데이터 언팩

모딩을 하기 위해서 스타바운드의 데이터를 가져와야 합니다. 하지만 게임 데이터는 assets.pak의 형태로 묶여있기 때문에 이 파일을 풀어 주어야 합니다.

3.1. Windows의 경우

1. 스타바운드 설치 폴더를 찾습니다.
2. 폴더에 Shift+우클릭을 해 명령 프롬포트/파워셸을 엽니다.
3. ".\win32\asset_unpacker.exe .\assets\packed.pak .\_UnpackedAssets"를 입력합니다.
4. "Unpacked assets to _UnpackedAssets in [걸린 시간]s," 라는 메세지가 뜨면 창을 닫습니다.

4. 모딩

프로그래밍 언어를 배우지 않더라도 약간의 기능만 알면 다양한 모딩을 할 수 있습니다.

4.1. 모드 폴더 만들기

새 폴더를 만듭니다.

다음은 어느 모드든 폴더 내에 있어야 할 파일들 입니다.
  • 모든 모드 폴더에는 해당 폴더가 모드임을 알려주는 .modinfo 파일이 필요합니다.
텍스트 편집기로 다음양식에 맞추어 적습니다.
{
"name" : "(모드의 이름)",
"version" : "(현 스타바운드 버전 ex) Beta v. Pleased Giraffe)",
"path" : ".(이 부분은 /mods 폴더의 경로를 적습니다만, /mods 폴더에 모드를 넣을 것이므로 . 만 찍어둡시다.)",
"author" : "(자신의 이름)"
}
확장자를 .modinfo 로 자신의 모드 폴더에 저장합니다.

  • 폰트가 필요합니다.
unpacked 파일로 가서 hobo.ttf 파일을 가져와줍니다.

모드를 만들 준비가 다 됐습니다.

4.2. 바닐라 파일 편집하기(기초)

위에서 언급했듯이 기존의 파일에서 값을 바꾸는 것만으로도 모드를 만들 수 있습니다.
예를 들어봅시다. 다음은 \unpacked\recipes\refinery\voxel1k.recipe 파일입니다.
{
"input" : [
{ "item" : "voxel1k", "count" : 1 }
],
"output" : { "item" : "money", "count" : 600 },
"groups" : [ "refinery" ]
}
"input"은 추출기(refinery)에 넣는 재료이며
"output"은 당연히 추출된 픽셀입니다.
"groups"은 해당 recipe의 범주를 결정합니다.

"count" : 600을 "count" : 1000로 바꾸어봅시다.
{
"input" : [
{ "item" : "voxel1k", "count" : 1 }
],
"output" : { "item" : "money", "count" : 1000 },
"groups" : [ "refinery" ]
}
위의 수정된 파일을 모드폴더에 넣으면 40%의 손실 없이 1K voxel을 분해할 수 있게 됩니다.
현재는 업데이트를 통해 복셀과 픽셀 전환시 손실이 없게 되었습니다. 그러니 1200으로 늘려서 창조경제를 실현

4.3. 바닐라 파일 편집하기(op 문법 사용하기)

그러나 위와 같은 모딩은 흔히 지저분한 편집(Dirty Edit)이라 불리며 파일 채로 편집하여 집어넣기 때문에 다른 모드와 충돌 가능성이 높아 배포용으로는 적합하지 않습니다.

대신 "op" 기능을 사용함으로서 충돌 가능성을 줄일 수 있습니다. "op" 기능은 쉽게 말해 파일 채로 편집이 아닌, 파일 내부의 특정 열(스트링)만 편집할 수 있게 해주는 기능입니다.

"op" 기능을 사용하기 위해서는 .patch 파일이 필요합니다. 다시 말하자면 아무개.config 파일을 "op" 기능을 사용하여 수정하려면 아무개.config.patch 파일이 아무개.config 파일과 같은 폴더(경로)에 있어야 합니다.

"op" 문법으로 가능한 값들은 "replace", "test", "add", "remove", "move", "copy"가 있습니다.
“test”, “add”, “replace”는 “path”와 “value”를 정의 해줘야 합니다.
“remove”는 “path”만 정의하면 됩니다.
“move”와 “copy”는 “from”과 “path”를 정의 해줘야 합니다.

차근차근 알아가 봅시다.

다음을 공통 예시로 들겠습니다.
{
"defaultBlueprints" : {
"tier1" : [
{ "item" : "test1" },
{ "item" : "test2" },
{ "item" : "test3" },
{ "item" : "test4" }
]
}
}

4.3.1. "add"

[
{
"op" : "add",
"path" : "/defaultBlueprints/tier1/-",
"value" : { "item" : "test5" }
}
]
{
"defaultBlueprints" : {
"tier1" : [
{ "item" : "test1" },
{ "item" : "test2" },
{ "item" : "test3" },
{ "item" : "test4" },
{ "item" : "test5" }
]
}
}
[
{
"op" : "add",
"path" : "/defaultBlueprints/tier1/2",
"value" : { "item" : "test5" }
}
]
{
"defaultBlueprints" : {
"tier1" : [
{ "item" : "test1" },
{ "item" : "test2" },
{ "item" : "test5" },
{ "item" : "test3" },
{ "item" : "test4" }
]
}
}

4.3.2. "remove"

[
{
"op" : "remove",
"path" : "/defaultBlueprints/tier1/2",
}
]
{
"defaultBlueprints" : {
"tier1" : [
{ "item" : "test1" },
{ "item" : "test2" },
{ "item" : "test4" }
]
}
}

4.3.3. "replace"

[
{
"op" : "replace",
"path" : "/defaultBlueprints/tier1/0/item",
"value" : "replace1"
}
]
{
"defaultBlueprints" : {
"tier1" : [
{ "item" : "replace1" },
{ "item" : "test2" },
{ "item" : "test3" },
{ "item" : "test4" }
]
}
}

4.3.4. "move"와 "copy"

[
{
"op" : "copy",
"from" : "/defaultBlueprints/tier1",
"path" : "/defaultBlueprints/tier2"
}
]
{
"defaultBlueprints" : {
"tier1" : [
{ "item" : "test1" },
{ "item" : "test2" },
{ "item" : "test3" },
{ "item" : "test4" }
],
"tier1" : [
{ "item" : "test1" },
{ "item" : "test2" },
{ "item" : "test3" },
{ "item" : "test4" }
]
}
}

4.3.5. 적용

위의 예시를 op 문법을 이용해 바꿔봅시다.
voxel1k.recipe.patch 파일을 만들어 다음과 같이 입력합니다.
[
{
"op" : "replace",
"path" : "/output",
"value" : { "item" : "money", "count" : 1000 }
}]
이 파일을 voxel1k.recipe 파일의 경로인 \recipes\refinery\에 맞추어 자신의 모드 폴더에 voxel1k.recipe.patch 로 저장을 하면 스타바운드 실행 시
{
"input" : [
{ "item" : "voxel1k", "count" : 1 }
],
"output" : { "item" : "money", "count" : 600 },
"groups" : [ "refinery" ]
}
{
"input" : [
{ "item" : "voxel1k", "count" : 1 }
],
"output" : { "item" : "money", "count" : 1000 },
"groups" : [ "refinery" ]
}
로 자동으로 바뀌어 적용이 됩니다.

4.4. 바닐라를 넘어서

해당 문서 참고

5. 커스텀

커스텀은 스타바운드 바닐라에 존재하는 아이템, 몬스터, NPC, 탈 것 등의 데이터에 추가 파라미터를 덮어씌우는 방식으로 구현됩니다.
커스텀은 모드 제작의 연장선입니다. 커스텀을 하기 위해서는 모딩 기술과 커스텀 기술 모두가 필요합니다.

베이스가 되는 바닐라 파일을 편집해서 구현하고 싶은 아이템으로 바꾸기 위한 수정사항들을 파일로 저장하는 대신 [파라미터]에 넣는것으로 커스텀 아이템이 완성됩니다.

스폰 커맨드
아이템 - /spawnitem [아이템 ID] [수량] [파라미터]
몬스터 - /spawnmonster [몬스터 ID] [레벨] [파라미터]
NPC - /spawnnpc [종족] [타입] [레벨] [시드] [파라미터]
탈 것 - /spawnvehicle [탈 것 ID] [파라미터]
Stagehand - /spawnstagehand [Stagehand ID] [파라미터]

6. 패킹

패킹이란 모드 폴더를 포함한 그 내부의 파일들을 하나의 파일로 묶어주는 것입니다. 아무개 모드 폴더를 패킹하면 아무개.modpack 이라는 하나의 파일이 됩니다.
굳이 패킹을 하지않고 모드 폴더를 그대로 \starbound\giraffe_storage\mods 폴더에 넣어주어도 적용이 됩니다만, 패킹을 하면 모드의 로딩 시간이 단축되고 배포 시 사용자가 압축을 풀 필요없이 옮기기만 하면 되기 때문에 모드 설치가 쉬워집니다.

패킹 방법은 다음과 같습니다.

1. 해당 링크로 가서 가장 최신버전의 ModpackHelper를 받습니다. 언팩을 하는 프로그램과 동일합니다.

2. 압축을 /Starbound/giraffe_storage/mods/ 폴더에 풀어줍니다.

3. ModpackHelper를 실행해서 1을 선택합니다. 제시되는 선택지 중 자신의 모드 폴더의 이름에 해당하는 번호를 선택합니다.

4. 그 폴더(/Starbound/giraffe_storage/mods/)에 모드 폴더이름.modpack 파일이 생성됩니다. 모드 폴더는 그대로 있으므로 스타바운드 실행 시 혼동되지 않게 \mods 폴더에서 빼줍시다.