{{{#!folding [ 펼치기 · 접기 ] {{{#!wiki style="margin:-11px;margin-top:-6px;margin-bottom:-7px" |
등장 종족 |
에이펙스 |
아비안 |
플로란 |
글리치 |
인간 |
하이로틀 |
노바키드 |
기타 종족 |
||
세계관 | 환경 | 마을 / 던전 | 아웃포스트 | 몬스터 / 보스 | |
등장인물 | 문서( 구판) | 퀘스트 | 미션 | ||
아이템 | 블록 | 자원 | 가구 | 제작대 | |
도구 | 무기 | 장비 / 패션 | 소모품 | ||
기타 항목 | 우주 정거장 | 우주선 | 메크 | 식민지 건설 | |
테크 | 커맨드 | OST | 도전과제 | ||
플레이 팁 | 모드 / 모딩 | 베타 테스트 | |||
모드 | Frackin' Universe(FU 모드) |
1. 모딩은 어렵지 않습니다.
스타바운드는 언어로 JSON 과 Lua를 사용합니다.물론 일일이 스크립트를 짜서 새로운 아이템 등 을 만드는 건 어렵지만
단순히 데이터 파일의 숫자만 바꾸는 식으로도 충분히 모드를 만들어 즐길 수 있습니다.
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" : "(자신의 이름)" |
- 폰트가 필요합니다.
모드를 만들 준비가 다 됐습니다.
4.2. 바닐라 파일 편집하기(기초)
위에서 언급했듯이 기존의 파일에서 값을 바꾸는 것만으로도 모드를 만들 수 있습니다.예를 들어봅시다. 다음은 \unpacked\recipes\refinery\voxel1k.recipe 파일입니다.
{
"input" : [
}
{ "item" : "voxel1k", "count" : 1 }
],"output" : { "item" : "money", "count" : 600 }, "groups" : [ "refinery" ] |
"output"은 당연히 추출된 픽셀입니다.
"groups"은 해당 recipe의 범주를 결정합니다.
"count" : 600을 "count" : 1000로 바꾸어봅시다.
{
"input" : [
}
{ "item" : "voxel1k", "count" : 1 }
],"output" : { "item" : "money", "count" : 1000 }, "groups" : [ "refinery" ] |
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 } }] |
{
"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 폴더에 넣어주어도 적용이 됩니다만, 패킹을 하면 모드의 로딩 시간이 단축되고 배포 시 사용자가 압축을 풀 필요없이 옮기기만 하면 되기 때문에 모드 설치가 쉬워집니다.
굳이 패킹을 하지않고 모드 폴더를 그대로 \starbound\giraffe_storage\mods 폴더에 넣어주어도 적용이 됩니다만, 패킹을 하면 모드의 로딩 시간이 단축되고 배포 시 사용자가 압축을 풀 필요없이 옮기기만 하면 되기 때문에 모드 설치가 쉬워집니다.
패킹 방법은 다음과 같습니다.
1. 해당 링크로 가서 가장 최신버전의 ModpackHelper를 받습니다. 언팩을 하는 프로그램과 동일합니다.
2. 압축을 /Starbound/giraffe_storage/mods/ 폴더에 풀어줍니다.
3. ModpackHelper를 실행해서 1을 선택합니다. 제시되는 선택지 중 자신의 모드 폴더의 이름에 해당하는 번호를 선택합니다.
4. 그 폴더(/Starbound/giraffe_storage/mods/)에 모드 폴더이름.modpack 파일이 생성됩니다. 모드 폴더는 그대로 있으므로 스타바운드 실행 시 혼동되지 않게 \mods 폴더에서 빼줍시다.