아이템 스폰
아이템 스폰은 게임에서 아이템이 나타나는 위치와 방법을 정의합니다. 이는 아이템 그룹, 스폰 확률, 맵 배치를 통해 제어됩니다.
아이템 그룹
아이템 그룹은 함께 스폰할 수 있는 아이템의 모음입니다. 전리품 테이블, 스폰 풀 및 무작위 생성에 사용됩니다.
기본 아이템 그룹 구조
{
"type": "item_group",
"id": "guns_pistol_common",
"items": [
["glock_19", 50],
["sig_mosquito", 30],
["walther_ppq", 20]
]
}
필드
| 필드 | 타입 | 설명 |
|---|---|---|
type |
string | 반드시 "item_group"이어야 합니다. |
id |
string | 이 아이템 그룹의 고유 식별자. |
items |
array | 아이템과 가중치의 배열. 각 항목은 [item_id, weight] 형식입니다. |
groups |
array | 선택 사항. 포함할 다른 아이템 그룹. |
예시: 의료용품 그룹
{
"type": "item_group",
"id": "medical_supplies",
"items": [
["bandages", 40],
["disinfectant", 30],
["aspirin", 20],
["first_aid", 10]
]
}
컬렉션 vs 분배
아이템 그룹은 두 가지 모드로 작동할 수 있습니다:
컬렉션 (Collection)
컬렉션에서 각 아이템은 가중치에 따라 독립적으로 스폰됩니다.
{
"type": "item_group",
"subtype": "collection",
"id": "zombie_drops",
"entries": [
{ "item": "cash_card", "prob": 5 },
{ "item": "id_military", "prob": 1 },
{ "item": "glass_shard", "prob": 80 }
]
}
분배 (Distribution)
분배에서 하나의 아이템만 가중 무작위 선택에 따라 스폰됩니다.
{
"type": "item_group",
"subtype": "distribution",
"id": "tools_common",
"entries": [
{ "item": "hammer", "prob": 30 },
{ "item": "screwdriver", "prob": 40 },
{ "item": "wrench", "prob": 30 }
]
}
확률
확률은 prob 필드를 사용하여 지정할 수 있습니다:
{
"item": "rare_artifact",
"prob": 1
}
더 높은 prob 값은 아이템이 스폰될 가능성이 더 높다는 것을 의미합니다.
아이템 스폰 위치
아이템 스폰 위치는 mapgen 정의에 지정됩니다:
{
"type": "mapgen",
"method": "json",
"om_terrain": "house_01",
"object": {
"place_items": [
{ "item": "bedroom", "x": 5, "y": 5, "chance": 70 }
]
}
}
place_items 필드
| 필드 | 타입 | 설명 |
|---|---|---|
item |
string | 스폰할 아이템 그룹 ID. |
x, y |
integer | 타일 좌표 (또는 영역에 대한 범위). |
chance |
integer | 각 아이템이 스폰될 확률 (0-100). |
repeat |
integer | 선택 사항. 스폰 시도 횟수. 기본값: 1. |
아이템 스폰 예시
예시 1: 부엌 아이템
{
"type": "item_group",
"id": "kitchen_items",
"items": [
["knife_butcher", 20],
["pot", 30],
["pan", 30],
["bowl_plastic", 40],
["cup_plastic", 40]
]
}
예시 2: 총기 상점 무기
{
"type": "item_group",
"subtype": "distribution",
"id": "guns_gunstore_common",
"entries": [
{ "item": "glock_19", "prob": 30 },
{ "item": "mossberg_500", "prob": 25 },
{ "item": "remington_870", "prob": 25 },
{ "item": "ar15", "prob": 15 },
{ "item": "ruger_1022", "prob": 35 }
]
}
예시 3: 희귀 전리품
{
"type": "item_group",
"subtype": "collection",
"id": "rare_artifacts",
"entries": [
{ "item": "sword_legendary", "prob": 1, "count": 1 },
{ "item": "armor_artifact", "prob": 1, "count": 1 },
{ "item": "ring_power", "prob": 5, "count": 1 }
]
}
중첩된 그룹
아이템 그룹은 다른 아이템 그룹을 포함할 수 있습니다:
{
"type": "item_group",
"id": "survivor_gear",
"groups": [
["clothing_survivor", 50],
["tools_survival", 40],
["weapons_survival", 30]
]
}
수량 조절자
스폰된 아이템의 수량을 지정할 수 있습니다:
{
"item": "9mm",
"prob": 50,
"count": [10, 30]
}
이것은 10-30개의 9mm 탄약을 스폰합니다.
충전량 조절자
아이템의 충전량을 설정할 수 있습니다:
{
"item": "flashlight",
"prob": 40,
"charges": [20, 80]
}
이것은 20-80% 충전된 손전등을 스폰합니다.
손상 조절자
아이템의 손상 상태를 설정할 수 있습니다:
{
"item": "jeans",
"prob": 30,
"damage": [1, 3]
}
이것은 약간 손상된 청바지를 스폰합니다.
컨테이너 조절자
아이템을 컨테이너에 스폰할 수 있습니다:
{
"item": "aspirin",
"prob": 20,
"container-item": "bottle_plastic_pill_small"
}
이것은 플라스틱 약병에 든 아스피린을 스폰합니다.
조건부 스폰
조건에 따라 아이템을 스폰할 수 있습니다:
{
"item": "hazmat_suit",
"prob": 10,
"condition": "has_effect_radiation"
}
맵 특수(Map Specials)
맵 특수는 지도 생성 중 특수 배치를 정의합니다:
{
"type": "map_special",
"id": "military_crash_site",
"spawns": {
"group": "mon_zombie_soldier",
"density": 0.5
},
"items": {
"item_groups": ["military_gear"]
}
}
지역 설정(Region Settings)
지역 설정은 다양한 지역의 아이템 스폰을 제어합니다:
{
"type": "region_settings",
"id": "default",
"field_coverage": {
"percent_coverage": 0.5,
"default_ter": "t_grass"
}
}
전리품 구역(Loot Zones)
전리품 구역은 자동 정렬 및 전리품 수집을 정의합니다:
{
"type": "LOOT_ZONE",
"id": "LOOT_FOOD",
"name": "음식 구역"
}
디버깅 아이템 스폰
아이템 스폰을 디버깅하려면:
- 디버그 메뉴를 사용하여 특정 아이템 그룹 스폰
- 아이템 그룹 ID 및 확률 확인
- 스폰 위치 및 빈도 검증
- 가중치 및 확률 테스트
모범 사례
- 균형잡힌 가중치 - 아이템 확률이 균형잡히고 공정한지 확인
- 테마 그룹 - 논리적 위치에 대한 테마 아이템 그룹 생성
- 희소성 제어 - 적절한 가중치로 강력한 아이템을 희귀하게 만들기
- 중첩 사용 - 재사용성을 위해 아이템 그룹을 논리적으로 구조화
- 테스트 - 게임에서 스폰 빈도 및 분배 테스트
일반적인 실수
- 가중치가 너무 높아 일반적인 아이템이 됨
- 아이템 그룹 ID를 잘못 참조함
- 스폰 확률을 테스트하지 않음
- 조건부 스폰을 잊음
- 손상/충전량 범위를 고려하지 않음
참고사항
- 아이템 그룹은
data/json/itemgroups/디렉토리에 정의됩니다. - 스폰 위치는
data/json/mapgen/디렉토리에 정의됩니다. - 확률은 상대적 가중치입니다 (절대 백분율이 아님).
- 아이템은 여러 그룹에 나타날 수 있습니다.
- 그룹은 다른 그룹을 참조하여 복잡한 전리품 테이블을 만들 수 있습니다.