- 상위 문서 : 스타바운드/모딩
목차
1 아이템을 직접 만들어보자
바닐라 파일을 가지고 노는 것도 좋지만, 새로운 물건을 만들어보고 싶습니다.
단, 여기부터는 하나의 파일이 아닌, 여러 파일을 수정, 생성해야되며 각 파일들의 관계도 고려 해야되기 때문에 많은 시간과 노력이 필요합니다.
예를들어 새로운 요리를 만들고 싶다면
- 요리 아이템의 이름과 효과를 결정하는 .consumable 파일이 필요합니다.
- 요리의 모양을 나타내는 16X16 크기의 .png 이미지가 필요합니다.
- 해당요리의 레시피와 제작 가능한 범주를 정의하는 .recipe 파일이 필요합니다.
각 파일들은 저장해야 할 경로가 다르며, 파일 내에서도 입력 가능한 변수가 다릅니다.
처음 아이템을 새로 만들어 볼 때는 아예 새로 시작하기 보다는 바닐라 파일을 복사하거나 따라하는 것도 좋은 방법입니다.
따라하기의 쉬운 예로 하나 만들어 봅시다.
1.1 새로운 음식을 만들어보자
포탈(게임)에 등장하는 케이크를 만들어봅시다.
1.1.1 .consumable 파일 만들기
공통적인 예시로는 빵(bread)을 보고 따라하겠습니다.
다음은 \items\generic\tier1\bread.consumable 파일입니다
{
"itemName" : "bread",
"rarity" : "Common",
"price" : 50,
"inventoryIcon" : "bread.png",
"description" : "Mmm, fresh out of the oven.",
"shortdescription" : "Bread",
"handPosition" : [0, 6],
"effects" : [ [
{
"effect" : "foodheal25",
"duration" : 60
},
{
"effect" : "wellfed",
"duration" : 150
}
] ],
"blockingEffects" : [
"wellfed"
],
"learnBlueprintsOnPickup" : [ "fishdumplings", "meatdumplings", "fishfingers" ]
}
간단한 영어를 할 줄 안다면 각 열 별로 의미하는게 무엇인지 짐작할 수 있습니다.
몇 개 설명해보자면
- "inventoryIcon" 은 해당 아이템이 끌어와 쓰는 이미지 입니다.
- "effects" 해당 아이템의 효과 입니다. 종류는 항목 참고
- "blockingEffects" 는 해당 아이템의 사용을 제한하는 것입니다. 만약 하단의 "wellfed"를 지운다면 캐릭터가 빵만은 원없이 먹을 수 있겠죠.
- "learnBlueprintsOnPickup" 는 해당요리 재작시 해금할 수 있는 요리들 입니다.
텍스트 편집기를 실행하여 위의 파일을 복사해 옵니다. 케이크의 이름은... 실제로 모티프가 된 Black forest cake으로 하겠습니다.
옆에 간단히 팁을 달겠습니다
{
"itemName" : "Black forest cake",
"rarity" : "Rare", [1]
"price" : 100000, [2]
"inventoryIcon" : "Black forest cake.png",[3]
"description" : "The cake is a lie!", [4]
"shortdescription" : "Black forest cake", [5]
"handPosition" : [0, 6], [6]
"effects" : [ [ [7]
{
"effect" : "foodheal720",
"duration" : 300
},
{
"effect" : "glow",
"duration" : 300
},
{
"effect" : "regenerationfast",
"duration" : 300
},
{
"effect" : "lowgrav",
"duration" : 300
}
] ],
"blockingEffects" : [
"wellfed" [8]
]
[9]
}
- 음식의 효과
아이템의 효과("effect")는 \stats\effects 폴더에 있는것을 이용합니다.
항목 참고
- 자신의 모드 폴더에서 items 폴더 안에 generic 폴더를 만들고 확장자를 .consumable 로 하여 저장합니다.
1.1.2 .png 이미지 가져오기 or 만들기
기존에 있는 이미지를 가져와서 "inventoryIcon" 에 맞게 이름을 바꿉니다.
새로운 이미지를 만들어 사용해도 됩니다.
이미지 편집 프로그램
1.1.3 .recipe 파일 만들기
아이템을 만들더라도 레시피가 없다면 스타바운드 내에서 재작이 불가능 합니다.
빵의 레시피 파일을 봐 봅시다.
다음은 \recipes\kitchen\tier1\bread.recipe 파일 입니다.
{
"input" : [
{ "item" : "wheat", "count" : 1 }
],
"output" : { "item" : "bread", "count" : 1 },
"groups" : [ "kitchen", "consumables", "foodhealing" ]
}
"input" 은 재료
"output" 은 재작한 물건
"count" 는 수량 입니다.
읽어보면 밀(wheat) 1개로 빵(bread) 1개를 만든다는 걸 알 수 있습니다.
"groups" 은 해당 레시피가 속해있는 범주를 표시합니다. 간단히 말하자면 태그(tag) 같은 개념입니다.
"groups"이 어디에 쓰이는지 알아보기 위해 목제 조리대(woodencookingtable)의 가구 파일을 봅시다.
다음은 \objects\crafting\woodencookingtable\woodencookingtable.object 파일의 일부입니다.
"interactData" : {
"config" : "/interface/windowconfig/craftingfood.config",
"filter" : [ "kitchen" ]
"filter" 에 "kitchen"이 있으니 목제 조리대(woodencookingtable)로 빵을 만들 수 있습니다.
이제 Black forest cake 의 레시피를 작성해 봅시다.
{
"input" : [
{ "item" : "wheat", "count" : 4 },
{ "item" : "egg", "count" : 2 },
{ "item" : "poison", "count" : 10 },
{ "item" : "milk", "count" : 2 },
{ "item" : "chocolate", "count" : 2 },
{ "item" : "sugar", "count" : 3 },
{ "item" : "money", "count" : 1000 }
],
"output" : { "item" : "Black forest cake", "count" : 1 },
"groups" : [ "kitchen", "consumables" ]
}
아이템 명을 표시할 때는 해당 아이템의 파일명을 사용합니다. 예를들어 픽셀 아이템의 파일 명이 money 이기 때문에 "pixel" 이 아닌 "money" 를 사용해야 합니다.
자신의 모드 폴더에서 recipes 폴더 안에 kitchen 폴더를 만들어 확장자를 .recipe 로 하여 저장합니다.
레시피를 적용하기 위해 player.config 파일의 기본 레시피에 해당 레시피를 추가해야합니다.
이 때는 앞서 사용한 "op"의 "add"기능을 사용합니다.
텍스트 편집기에 다음을 입력합니다.
[
{ "op" : "add", "path" : "/defaultBlueprints/tier1/-", "value" : { "item" : "Black forest cake" } }
]
모드 폴더에 바로 player.config.patch 파일로 저장합니다.
1.2 새로운 무기를 만들어보자 (원거리)
좀 더 어려운걸 만들어봅시다.
1.2.1 .gun 파일 만들기
로켓런처를 예시로 봅시다.
다음은 \items\guns\accelerator\feroziumrocket.gun 파일 입니다.
{
"itemName" : "feroziumrocket",
"price" : 1875,
"inventoryIcon" : "feroziumrocket.png",
"dropCollision" : [-8.0, -3.0, 8.0, 3.0],
"maxStack" : 1,
"rarity" : "Legendary",
"description" : "Yup. It's a rocket launcher.",
"shortdescription" : "Ferozium Launcher",
"image" : "feroziumrocket.png",
"handPosition" : [-1, -3],
"firePosition" : [21, 2],
"recoilTime" : 0.1,
"level" : 6,
"tooltipKind" : "gun",
"weaponType" : "Rocket Launcher",
"fireTime" : 2.0,
"inaccuracy" : 0.02,
"twoHanded" : true,
"walkWhileFiring" : false,
"projectileType" : "rocketshell",
"projectile" : {
"speed" : 1.0,
"acceleration" : 150,
"life" : 3,
"power" : 12
},
"muzzleEffect" : {
"fireSound" : [ { "file" : "/sfx/gun/rocket_shot.wav" } ],
"animation" : "/animations/muzzleflash/bulletmuzzle3/bulletmuzzle3.animation"
}
}
보이는 것처럼 .gun 파일에 넣을 수 있는 값들은 매우 다양하며 그 중 몇몇은 필수입니다.
따라서 기존에 있는 파일을 복사해와서 덮어씌우는 방법을 추천합니다.
눈여겨 볼 만한 값들만 정리해봅시다. 예시에 없는 값들도 있습니다,
- 무기 관련
값 | 설명 | 예시 |
"classMultiplier" | 에너지 소모량을 설정합니다. 필수는 아닙니다. | "classMultiplier" : 0[10] |
"handPosition" | 무기가 위치할 좌표를 설정합니다. | "handPosition" : [-1, -3] |
"firePosition" | 탄환과 총구 화염이 위치할 좌표를 설정합니다. | "firePosition" : [21, 2] |
"recoilTime" | 반동 시간을 설정합니다. | "recoilTime" : 0.1 |
"level" | 특정 값이 없습니다. 아무 숫자나 쓰세요 | "level" : 1 |
"tooltipKind" | "gun"으로 둡시다 | "tooltipKind" : "gun" |
"weaponType" | 특정 값이 없습니다. 무기의 이름 아래 표시되는 것입니다. | "weaponType" : "banana" |
"fireTime" | 발사 속도를 결정합니다. 단위는 초(s) | "fireTime" : 0.25 |
"inaccuracy" | 발사체의 오차입니다. 0은 오차 0%입니다. | "inaccuracy" : 0.13 |
"twoHanded" | 한 손 무기인지, 양 손 무기인지를 설정합니다. 원한다면 샷건을 두 개 장비할 수도 있습니다 | "twoHanded" : true |
"walkWhileFiring" | true/false; 마우스를 누르고있을 때 걸을 수 있는지를 설정합니다. | "walkWhileFiring" : false |
"muzzleEffect" | 총구의 이펙트를 추가합니다. | "muzzleEffect" : { "fireSound" : [ { "file" : "/sfx/gun/..." } ], "animation" : "/animations/muzzleflash/..." } |
"fireSound" | 발사음을 설정합니다. "muzzleEffect"의 하위 값입니다. /sfx/gun 폴더 내부의 값을 사용합니다. | |
"animation" | 총구 화염의 종류를 설정합니다. "muzzleEffect"의 하위 값입니다. /animations/muzzleflash 폴더 내부의 파일을 사용합니다. |
- 발사체 관련
값 | 설명 | 예시 |
"projectileCount" | 한 번에 발사되는 발사체의 개수를 설정합니다. 1이면 생략해도 됩니다. | "projectileCount" : 3 |
"projectileType" | 발사체의 종류를 설정합니다. 보통 \projectiles\guns 폴더에 있는 파일을 사용합니다. | "projectileType" : "standardbullet" |
"projectile" | 발사체에 속성을 부여합니다. [11] | "projectile" : { "speed" : 1.0, "acceleration" : 150, "life" : 3, "power" : 3.5, "pointLight" : true, "damageKind" : "burning" } |
"speed" | 발사체의 속도를 설정합니다. "projectile"의 하위 값입니다. | |
"acceleration" | 발사체의 가속도를 설정합니다. 필수는 아닙니다. "projectile"의 하위 값입니다. | |
"life" | 발사체의 지속시간을 설정합니다. 필수는 아닙니다. "projectile"의 하위 값입니다. | |
"power" | 발사체의 대미지를 설정합니다. "projectile"의 하위 값입니다. | |
"pointLight" | true/false; 발사체의 발광 여부를 설정합니다. | |
"damageKind" | 대미지의 종류를 설정합니다. .projectile 파일에 설정되어 있으므로 보통은 생략합니다. | |
"statusEffects" | 추가 대미지 효과를 설정합니다. .projectile 파일에 설정되어 있으므로 보통은 생략합니다. | |
-todo- |
- 활 제작 시 추가
"fireOnRelease" | true/false; false는 자동발사, true는 누르고있는 마우스를 떼면 발사. 활이나 스테프 등 충전식 무기를 만들때 사용합니다. | "fireOnRelease" : true | |
-todo- |
- 스테프 제작 시 추가
"fireOnRelease" | true/false; false는 자동발사, true는 누르고있는 마우스를 떼면 발사. 활이나 스테프 등 충전식 무기를 만들때 사용합니다. | "fireOnRelease" : true | |
-todo- |
1.2.2 새로운 발사체(탄환) 만들기 - (선택)
보통은 \projectiles\guns 폴더에 있는 파일을 사용하지만 새로운 탄환이나 다른 게임에 나오는 탄환을 사용하고 싶습니다.
\projectiles\guns\bullets\bouncybullet 폴더에 가면 알 수 있듯이 4가지가 필요합니다.
- icon.png
- 탄환 이름.png
- 탄환 이름.frames
- 탄환 이름.projectile
-todo-
1.2.3 .recipe 파일 만들기
2 오브젝트(가구)를 직접 만들어보자
- ↑ 가능한 값으로는"Common" "uncommon" "Rare" "Legendary" 이 있습니다. 굳이 바꿀 필요는 없습니다.
- ↑ 아이템의 가격입니다. 아웃포스트에서 이 값의 10% 가격에 팔 수 있습니다. 제작 레시피와는 무관합니다.
- ↑ 위에 언급했듯이 해당 아이템이 끌어와 쓰는 이미지 입니다. 이미지 파일은 같은 폴더 내에 있어야 합니다.
- ↑ 아이템의 설명입니다. 한글로 써도 됩니다.
- ↑ "itemName" 과 일치하게 하는게 좋습니다.
- ↑ 아이템의 이미지가 적용되는 좌표입니다.
- ↑ 여기에서 원하는걸 가져옵니다.
- ↑ 그대로 둡시다.
- ↑ "learnBlueprintsOnPickup" 는 삭제했습니다. 어느 스트링을 지울 시 위 열의 , 를 지우는걸 잊지 마세요.
- ↑ 에너지 소모량이 0이 됩니다.
- ↑ 아래에서 보면 알겠지만 하위 값들이 \projectiles\guns 폴더에 있는 파일의 내용과 중복될 수 있습니다. 중복이 될 시 .gun 파일의 내용으로 덮어씌워집니다.