Next Run - 모드
Next Run 모드 가이드
Next Run의 모드 동작 방식, 파일 구조, 게임 컴포넌트에 대한 상세 설명입니다. 직접 모드를 만들고 배포할 때 참고할 수 있도록 이 링크를 저장해 두세요.
1. 개요
이 문서는 Next Run의 모드 시스템을 설명합니다. 모드 설치, 직접 만들기, 다른 플레이어와 공유하는 방법을 다룹니다.
- 모드가 어떻게 만들어지고 작동하는지 이해하려면 섹션 2를 한 번은 읽어주세요.
- 섹션 3과 4는 레퍼런스로 활용하세요.
- 실제 동작을 확인하려면 게임 내 예제를 활용하세요. Steam Workshop: https://steamcommunity.com/app/1295870/workshop/.
- 버전 1.1.0 기준 게임 파일은 여기에서 확인할 수 있습니다: https://clarusvictoria.com/files/next_run_files_examples_1.1.0.zip.
2. 모드 시스템
게임을 실행하고 '플레이' 및 '게임 생성' 버튼을 누르면 게임 디렉토리 내 Mods 폴더가 스캔됩니다. 이 디렉토리의 각 하위 폴더에 modinfo.json 파일이 있으면 모드로 인식됩니다.
2.1. Steam Workshop, 모드 설치 및 게시
Steam 클라이언트에서 게임을 실행하면, '플레이' 메뉴에 다음 버튼이 포함된 '모드' 패널이 표시됩니다:
- Steam Workshop
- 모드 폴더
- 게시
- 가이드
2.1.1. Steam Workshop
Steam 클라이언트 내에서 Steam Workshop을 엽니다. 모드를 다운로드하려면 구독해야 합니다. 구독하면 자동으로 다운로드가 시작됩니다. 모드 크기가 클 경우 시간이 걸릴 수 있으며, 다운로드 상태는 Steam 클라이언트에서 확인할 수 있습니다.
2.1.2. 모드 폴더
게임의 모드 폴더를 엽니다.
2.1.3. 게시
게임이 Mods 폴더를 자동으로 스캔하여 본인이 만든 모든 모드를 Steam Workshop에 게시합니다.
- 새 모드인 경우 steam_id가 자동 생성됩니다.
- 기존 모드인 경우 업데이트됩니다.
- 업로드 중에는 게시 버튼의 모양이 바뀝니다.
- 변경 사항이 있는 경우에만 게시됩니다.
- modinfo.json 파일 변경은 콘텐츠 변경으로 간주되지 않습니다.
- 게시된 모드는 전 세계 플레이어가 이용할 수 있습니다. Steam Workshop이 유일한 배포 방법은 아닙니다. 모드 폴더를 Mods 디렉토리에 직접 넣어도 됩니다.
2.1.4. 가이드
이 가이드로 연결되는 링크입니다.
2.2. JSON 파일
게임의 모든 데이터와 텍스트는 JSON 형식을 사용합니다. 일반 텍스트와의 주요 차이점은 데이터를 중괄호 {}로 감싸야 한다는 것입니다.
JSON 문법 설명:
- https://en.wikipedia.org/wiki/JSON
- https://developer.mozilla.org/en-US/docs/Learn_web_development/Core/Scripting/JSON
게임 내 파일 예제를 참고하시는 것을 권장합니다.
2.3. 파일 구조
각 모드는 게임과 동일한 파일 구조를 가집니다. 이 파일들은 새 콘텐츠를 추가하거나 기존 콘텐츠를 수정합니다. JSON 파일은 개별 요소를 추가하거나 변경합니다. 다른 형식의 파일(png, ogg)은 전체가 교체됩니다.
예: data/game.json 파일을 만들어 'Warrior'(게임 클래스) 엔티티를 수정하면, 해당 클래스만 변경되고 game.json의 나머지 엔티티는 영향을 받지 않습니다. portrait_warrior_front.png 파일을 추가하면, 이름이 같은 게임 내 이미지가 완전히 교체됩니다.
모드 내에는 필수 파일/폴더와 선택 파일/폴더가 있습니다. 표준 구조는 다음과 같습니다:
- 모드 폴더 이름 (아무 이름이나 가능, 모드 이름과 다를 수 있음)
- modinfo.json
- preview.png
- data/
- icons/
- sounds/
- texts/
- tiles/
자세한 이해를 위해 게임 내 예제와 기존 모드를 참고하시기 바랍니다. 아래에 각 폴더와 파일에 대한 상세 설명이 있습니다.
2.3.1. modinfo.json
모드 메타데이터 파일입니다. 일부 데이터는 Steam Workshop 게시 시 사용됩니다.
- title - 모드 이름, Steam에 표시됩니다.
- version - 모드 버전.
- description - 모드 설명.
- tags - Steam Workshop 탐색용 태그.
- order - 모드 로드 순서. 여러 모드가 같은 데이터를 수정하면, order 값이 큰 모드가 작은 모드를 덮어씁니다.
- steam_id - 수동 입력 불필요, 게시 시 자동 생성됩니다.
- created_time - 생성 시간.
- changed_time - 수정 시간.
- 다른 필드를 추가할 수 있지만, 파일 내부에서만 사용됩니다. 모드 작성자는 Steam Workshop을 통해 자동 결정됩니다.
2.3.2. preview.png
Steam Workshop용 모드 이미지(아이콘)입니다. 권장 해상도는 256x256 또는 512x512입니다. 비율은 정사각형. 투명 PNG 또는 JPG를 사용할 수 있습니다.
2.3.3. data
데이터 JSON 파일이 들어있는 폴더입니다. 기존 게임 엔티티를 수정하거나 새 엔티티를 추가하는 파일이 포함됩니다. 변경하거나 추가할 파일과 필드만 만들면 됩니다. 수정 가능한 데이터에 대한 상세 설명은 섹션 3을 참고하세요.
2.3.4. icons
게임 아이콘이 들어있는 폴더입니다. GUI와 타일을 제외한 대부분의 이미지가 포함됩니다. 여러 게임 상황에 맞는 여러 표준 크기와 레이어가 사용됩니다. 게임에서는 투명 배경의 PNG 파일을 사용합니다.
2.3.5. sounds
사운드와 음악이 들어있는 폴더입니다. 새 파일을 추가하거나 기존 파일을 교체할 수 있습니다. 사용 형식은 OGG입니다.
2.3.6. texts
게임 번역 텍스트가 들어있는 폴더입니다. 각 파일은 하나의 언어에 대응하며 IETF BCP-47 / ISO 표준을 사용합니다. 현재 13개 언어를 지원합니다: ruRU.json, trTR.json, jaJP.json, koKR.json, zhTW.json, zhCN.json, plPL.json, ptBR.json, itIT.json, esES.json, frFR.json, deDE.json, enUS.json.
2.3.7. tiles
타일 이미지가 들어있는 폴더입니다. 투명 배경의 PNG 파일을 사용합니다. 기본 타일 크기는 256x384입니다. 타일은 지면, 오브젝트, 숲, 산, 도로 등 여러 레이어로 구성됩니다.
2.4. 모드 동기화
모드를 받으면, 게임 실행 시마다 Steam Workshop에 게시된 최신 버전으로 자동 동기화됩니다.
본인이 모드 작성자인 경우 동기화가 수행되지 않으며 모드 파일이 덮어쓰이지 않습니다. 모드 작업 중 변경 사항이 게임 재시작 시 사라지지 않도록 하기 위함입니다.
다른 사람의 모드를 기반으로 모드를 만들려면, 게임을 재시작하기 전에 다음 작업을 수행해야 합니다:
- 모드 폴더 이름을 해당 모드의 id와 다른 이름으로 변경.
- modinfo.json 파일에서 'author', 'created_time', 'steam_id', 'changed_time' 필드를 삭제.
2.5. 데이터 병합
모드와 게임의 JSON 데이터 파일은 교체가 아닌 병합됩니다.
병합 순서:
- 게임 JSON 파일의 원본 엔티티를 기본값으로 사용.
- 그 위에 모드 데이터를 적용. 모드는 modinfo.json의 order 필드에 지정된 우선순위에 따라 적용됩니다.
병합 시 모든 컴포넌트의 모든 필드가 개별적으로 처리됩니다. 예를 들어 엔티티에 'hideIfZero':true가 설정되어 있고 false로 바꾸고 싶다면, 필드를 삭제하는 것만으로는 부족하고 'hideIfZero':false를 명시적으로 지정해야 합니다.
list.json의 리스트도 같은 원리로 병합됩니다. 요소 하나만 추가할 때 모든 필드를 포함한 전체 리스트를 복제할 필요는 없습니다. 단, 단순 데이터만 포함된 리스트(예: RndGoodEvents, RndEvents)는 전체가 교체됩니다.
3. 컴포넌트
Next Run은 ECS 아키텍처를 기반으로 합니다. 게임 전체가 엔티티로 구성됩니다. 엔티티는 컴포넌트의 컨테이너입니다. 엔티티에는 id 필드만 있고, 나머지 모든 데이터는 컴포넌트로 기술됩니다. 모든 데이터는 JSON 파일에 정의됩니다.
JSON 파일 내 요소 예시:
3.1. Button
게임 내 버튼의 외형과 동작을 정의합니다.
- panel = string, 버튼의 기본 패널. 게임 내 모든 버튼은 특정 패널이나 메뉴 안에 있습니다. 예제를 참고하여 원하는 패널을 선택하세요.
- icon = string, 버튼 아이콘 이름. icons 폴더의 PNG 파일에서 가져옵니다.
- iconType = string, 버튼 유형, 크기와 요소에 영향. 옵션: 'btn' - 기본 버튼, 'btnBig' - 하단에 값이 표시되는 큰 버튼.
- color = string, 아이콘 배경색. 예: green, yellow. 게임이 인식하는 색상 목록: green, superGreen, lightGreen, darkGreen, red, superRed, darkRed, gray, lightGray, darkGray, lightBlue, blue, darkBlue, darkDarkBlue, grayYellow, yellow, pink, cyan, darkCyan, almostBlack, black, orange, darkOrange, lightViolet, purple, chartreuse, num, gameBack, blank, halfTrans, white, base.
- numText1 = double, 아이콘 값.
- numTextAdd = string, 아이콘 값 보충 텍스트, 예: '%' 기호.
- numText1Type = string, 아이콘 값 유형, 예: level, total, duration.
- numCustom = string, 고유 아이콘 값, 예: '∞'.
- numIcon = string, 값 옆의 아이콘, 예: star(레벨용), coin(상품용).
- hotkey = string, 키보드 단축키.
- hide = bool, 버튼 숨김 여부.
- hideIfZero = bool, Total.now가 0이면 버튼 숨김.
- disabled = bool, 버튼 비활성화 여부. 예: 게임 시작 시 일부 메뉴가 비활성화됨.
- interactable = bool, 버튼 인터랙션 가능 여부, 기본값 true. 비인터랙티브 버튼 예: 인벤토리 슬롯.
- cantBeDeselect = bool, 이 버튼의 선택 해제를 금지.
- cantBeSelect = bool, 클릭 시 버튼 선택을 금지.
- draggable = bool, 드래그 앤 드롭으로 이동 가능 여부.
- x = double, 인터페이스 내 X좌표 위치. 패널 없는 버튼(예: 인벤토리 슬롯)에 사용.
- y = double, X와 동일하게 Y좌표.
- upMiniPred = string, 해당 엔티티에 대해 확인할 액션 이름. 액션이 가능하면 업그레이드 유형의 미니 아이콘 힌트가 표시.
- craftMiniPred = string, 제작 액션에 대한 유사한 힌트.
- raiseMiniPred = string, 소환 액션에 대한 유사한 힌트.
3.2. Tooltip
버튼 툴팁의 내용을 정의합니다.
- text = string, 게임 내에서 볼 수 있는 엔티티 이름.
- dontShowDuration = bool, 엔티티의 지속시간 값 표시 금지.
- hideSources = bool, 이 엔티티의 값에 영향을 주는 소스 엔티티 표시 금지.
- hideAsSubjTT = bool, 연결된 엔티티의 소스로 이 오브젝트 표시 금지.
- desc = string, 설명 텍스트, 툴팁 상단에 표시.
- desc2 = string, 설명 텍스트, 툴팁 하단에 표시.
- redDesc = string, 빨간색으로 강조된 설명 텍스트, 하단에 표시.
- totalTextAs = string, '합계' 대신 표시할 텍스트.
- ttPos = string, 버튼 기준 툴팁 위치, 옵션: 'top', 'left'.
3.3. GameClass
게임 클래스의 메커닉을 정의합니다.
- text = string, 게임 내 클래스 이름.
- portrait_back = string, 클래스 선택 시 배경 이미지 391x598.
- portrait_front = string, 클래스 선택 시 클래스 이미지 411x620, 투명.
- figurine = string, 맵 위 캐릭터 아바타 이미지 149x243.
- doll = string, 인벤토리 내 흑백 클래스 이미지 460x784.
- bonusSkill1 = string, 보너스를 받는 스킬 1의 이름.
- bonusSkillVal1 = double, 스킬 1 보너스 크기.
- bonusSkill2 = string, 보너스를 받는 스킬 2의 이름.
- bonusSkillVal2 = double, 스킬 2 보너스 크기.
- debuffSkill1 = string, 페널티를 받는 스킬 1의 이름.
- debuffSkillVal1 = double, 스킬 1 페널티 크기.
- debuffSkill2 = string, 페널티를 받는 스킬 2의 이름.
- debuffSkillVal2 = double, 스킬 2 페널티 크기.
- gold = double, 시작 시 클래스의 골드량.
- remains = double, 시작 시 유해 수.
- equip = List(string), 시작 시 장착할 아이템 목록.
- units = string, 시작 시 보유할 유닛 이름.
- itemName = string, 시작 시 인벤토리에 있는 아이템 이름.
- itemNum = double, 시작 시 인벤토리 아이템 수량.
- learnList = string, 학습할 주문/도면 목록, list.json에 정의.
- learnNum = double, 목록에서 학습할 주문/도면 수.
- lessTime = double, 지옥 공격 간격 단축량.
- manaBonus = double, 마나 보너스, 최대 및 현재 값.
- upgradeDexterityBonusMod = double, 민첩 스킬에 의한 업그레이드 아이템 보너스.
- skillPointsPerLevel = double, 레벨업 시 받는 스킬 포인트 수.
- upgradeManaCostMod = double, 주문 업그레이드 효율 보너스.
- freeRegion = bool, 무료 지역.
- necroBonus = bool, 네크로맨서 게임플레이 및 보너스.
- druidBonus = bool, 드루이드 게임플레이 및 보너스.
- stances = bool, 자세/형태/명령 보유 여부.
- defStance = string, 기본 자세.
- notDemo = bool, 데모에서 사용 불가인 클래스.
- notTutorial = bool, 튜토리얼 모드에서 사용 가능 여부.
3.4. GameMode
게임 모드의 메커닉을 정의합니다.
- text = string, 게임 내 모드 이름.
- back = string, 모드 선택 시 배경 이미지 391x598.
- moreTime = double, 지옥 공격 간격 증가량.
- lessTime = double, 지옥 공격 간격 단축량.
- woundChance = double, 부상 확률.
- notDemo = bool, 데모에서 사용 불가인 모드.
- scenario = string, 해당 모드의 별도 맵 이름.
- noHellAttacks = bool, 이 모드에서 지옥 공격 없음(샌드박스 등).
- savesOnExitOnly = bool, 이 모드에서는 게임 종료 시에만 저장.
3.5. Biome
생물군계(바이옴) 메커닉을 정의합니다.
- frequency = double, 맵 생성 시 바이옴 출현 빈도. 값이 클수록 자주 나타남. 0이면 생성되지 않음. Lava 바이옴은 항상 마지막 지역으로 생성.
- hexBase = string, 해당 바이옴의 기본 타일, 정착지 아래 바닥으로 생성.
- music = string, 바이옴 음악 트랙 파일명.
- hexPatterns = List(string), 바이옴 내 오브젝트 패턴 목록. 카드 덱 방식으로 작동: 패턴을 무작위로 섞은 뒤 하나씩 뽑고, 덱이 비면 재생성. 패턴 형식: 오브젝트이름#오브젝트이름, #이 구분자.
- mobLevel1 .. mobLevel8 = string, 지역 레벨에 따라 바이옴에 생성되는 유닛 이름.
3.6. TileAsset
게임 맵 위 오브젝트의 외형을 정의합니다.
- tileMap = string, 레이어 이름. LandTilemap - 지면, ObjectTilemap - 일반 오브젝트, RoadTilemap - 도로 등. 차이는 레이어 렌더링 순서뿐.
- rawSprite = string, 맵에 추가할 256x384 이미지.
- icon = string, 모든 TileMap 위에 추가되는 아이콘.
- buttonIcon = bool, Button에서 아이콘을 가져올지 여부.
- delLevel = double, 제거 난이도, 액션으로 오브젝트를 제거하는 데 필요한 수준.
3.7. Shop
상점 메커닉을 정의합니다.
- slots = int, 상점 슬롯 수.
- type = string, list.json에 있는 상점 품목 이름.
3.8. Item
아이템 메커닉을 정의합니다.
- slot = string, 장착 슬롯 이름.
- stackable = bool, 한 더미에 2개 이상 쌓을 수 있는지.
- upgradable = bool, 아이템 업그레이드 가능 여부, 업그레이드 시간은 레벨에 따라 결정.
- upProgress = double, 업그레이드 소요 시간.
- order = double, 상점 내 아이템 순서, 값이 작을수록 위에 표시.
3.9. Mob
유닛 메커닉을 정의합니다.
- hell = bool, 지옥 유닛. 매수 시 페널티. 지옥 공격에 참여. 유해 보너스.
- undead = bool, 언데드 유닛. 매수 불가. 특수 업그레이드 메커닉.
- type = string, 유닛 유형 - 'Warriors', 'Defenders', 'Mages', 'Gatherers', 'Crafters'. 배경색, 플레이어 적중 확률, 데미지 유형, 전리품 유형을 결정.
- upMob = string, 업그레이드 대상 유닛.
- upCostName = string, 업그레이드에 필요한 아이템.
- upCostNum = double, 업그레이드에 필요한 자원 수, 기본값 1.
3.10. Dungeon
던전 메커닉을 정의합니다.
- magic = bool, 마법 던전. 데미지 유형, 전리품, 애드온에 영향.
- boss = bool, 최종 던전.
3.11. Ruins
유적 메커닉을 정의합니다 - 아이템 탐색 장소.
3.12. Addon
확장(addon) 메커닉. 던전이나 유적과 같은 타일에 위치하며 파라미터를 변경하고 별도의 보상을 제공합니다.
- skill = string, 던전 클리어 또는 유적 조사 시 플레이어가 받는 스킬 이름. 'Random', 'Strength' 등 지정 가능.
- unit = string, 액션 완료 후 보너스 유닛 이름. 'Random' 지정 가능.
- item = string, 액션 완료 후 보너스 아이템 이름. 'Random' 지정 가능.
- phyChanceMulti = double, 클리어 시 물리 데미지 확률 배율. 예: 50(%).
- magChanceMulti = double, 클리어 시 마법 데미지 확률 배율. 예: 50(%).
- progressMulti = double, 클리어/조사 액션 소요 시간 배율. 예: 100(%).
- dmgMulti = double, 클리어 시 데미지량 배율. 예: 50(%).
3.13. Build
해당 오브젝트가 건물임을 정의합니다.
3.14. Center
해당 오브젝트가 정착지임을 정의합니다.
- captureProgress = double, 정착지 점령에 필요한 노력.
- upProgress = double, 정착지 업그레이드에 필요한 노력.
- upCostName1 = string, 업그레이드에 필요한 아이템 1 이름.
- upCostNum1 = double, 업그레이드에 필요한 아이템 1 수량.
- upCostName2 = string, 아이템 2 동일.
- upCostNum2 = double, 아이템 2 동일.
- upCostName3 = string, 아이템 3 동일.
- upCostNum3 = double, 아이템 3 동일.
- upProp = string, 업그레이드 대상 정착지.
3.15. Gatherable
해당 오브젝트에서 자원을 채취할 수 있음을 정의합니다.
- gather = string, 채취할 자원 이름.
- deposit = bool, 광상 여부. true이면 광산 건설 가능.
3.16. AlliedForest
드루이드 플레이 시 '동맹 숲' 메커닉과 값을 정의합니다.
- allyBonus = double, '동맹 숲' 보너스 크기.
3.17. Graveyard
해당 오브젝트가 묘지임을 정의합니다. 네크로맨서 플레이에 중요합니다. 채취 가능한 유해 수는 무작위로 생성됩니다.
- now = double, 현재 유해 값.
- rndMin = double, 유해 수 최솟값.
- rndMax = double, 유해 수 최댓값.
- rndCeil = bool, 랜덤 상한값 올림.
3.18. Pred
액션 컴포넌트. 대부분의 기능은 코드에 숨겨져 있지만 일부는 접근 가능합니다.
- action = string, 액션 실행 시 발동할 액션 이름.
- local = bool, 상호작용하려면 오브젝트와 같은 타일에 있어야 하는지.
- attackPred = bool, 공격형 액션, 전투 주문 사용 시 자동 적용.
- gatherPred = bool, 채취형 액션, 채취 주문 사용 시 자동 적용.
- craftPred = bool, 제작형 액션, 제작 주문 사용 시 자동 적용.
- skill = string, 액션 실행에 사용되는 스킬, 예: 공격 액션에는 공격 스킬 사용.
- longPred = bool, 즉시 완료되지 않고 시간이 필요한 액션.
- repeat = bool, 중지할 때까지 반복되는 액션.
- noOwner = bool, 오브젝트 선택 없이 실행 가능한 액션.
- skipLongTooltip = bool, 액션 툴팁 간소화 버전.
- onlyClass = string, 특정 클래스에서만 사용 가능한 자세/형태/명령형 액션.
3.19. Total
엔티티의 수치 값을 정의하는 컴포넌트, 일반적으로 수량을 나타냅니다.
- now = double, 현재 값.
- inc = double, 턴당 증가량.
- max = double, 최댓값.
- min = double, 최솟값.
- rndMin = double, 랜덤 최솟값.
- rndMax = double, 랜덤 최댓값, now를 대체.
- rndCeil = bool, 랜덤 값 생성 시 올림.
- overMax = bool, 한도 초과 허용.
- delIfZero = bool, 값이 0이면 삭제.
- numPercent = bool, 값이 퍼센트인지 여부.
3.20. Level
엔티티의 레벨을 정의하는 컴포넌트.
- now = double, 현재 값.
- max = double, 최댓값.
- min = double, 최솟값.
- localLevelPlus = int, 로컬 레벨 보너스. 맵 위 오브젝트에만 작동하며, 레벨이 지역 레벨 + localLevelPlus 값이 됩니다.
3.21. Duration
엔티티의 지속시간을 정의하는 컴포넌트.
- now = double, 현재 값.
- max = double, 최댓값.
- min = double, 최솟값.
- delIfZero = bool, 값이 0이면 삭제.
3.22. Mods
수정자 목록 컴포넌트. 생성 시 다른 엔티티에 영향을 주는 변경 세트가 구성됩니다. 엔티티 삭제 시 이 변경도 사라집니다.
- radius = int, 수정이 영향을 미치는 반경, 맵에서만 작동.
- objType = string, 수정 대상 엔티티 유형, 예: 'Stat', 'Skill', 'Prop', 'Item', 'ModableVal', 'PropMod'.
- objName = string, 엔티티 이름, 예: 'Speed'.
- objComp = string, 수정 대상 컴포넌트, 예: 'Total', 'Level'.
- objKey = string, 수정 대상 컴포넌트 필드, 예: 'now', 'inc', 'max'.
- modType = string, 필드 영향 방식: 'add', 'mult', 'addPerLevel', 'multPerLevel'.
- now = double, 수정자 값, 변경량.
- subjTooltipText = string, 동적 툴팁에 주체 표시 추가.
- skipPerTooltip = bool, 툴팁에서 PerLevel을 Plus로 대체.
- skipSubjTooltip = bool, 이 주체의 툴팁 표시 건너뛰기.
3.23. ModableVals
글로벌 게임 변수 목록 컴포넌트. 특정 엔티티에 대한 연결은 형식적입니다. 이 변수 관련 로직의 대부분은 게임 코드에 숨겨져 있습니다.
- now = double, 변수 값.
3.24. Slot
엔티티를 인벤토리 슬롯으로 정의하는 컴포넌트.
- name = string, 슬롯 이름. 아이템을 이 슬롯에 넣으려면 Item 컴포넌트의 slot 필드 값이 일치해야 합니다.
3.25. Container
엔티티를 셀이 있는 컨테이너로 정의합니다.
- cells = int, 컨테이너의 셀 수.
- cellsPanel = string, 패널 이름.
3.26. Tom
학습하여 주문을 획득하거나 업그레이드할 수 있는 마법서임을 정의합니다.
- cast = string, 주문 이름.
3.27. Cast
엔티티가 주문임을 정의합니다.
- mana = double, 주문 마나 비용.
- predSkill = string, 이 주문 활성화 시 어떤 유형의 액션을 실행할지, 예: Attack 유형은 공격 액션을 자동 실행.
- notSkills = string, 이 주문 사용에 필요한 액션 힌트.
- attack = double, 이 주문으로 공격 액션이 얼마나 가속되는지, 사실상 마법 데미지.
- gather = double, 채취 액션 가속량.
- craft = double, 제작 액션 가속량.
- heal = double, 플레이어 캐릭터 치유량.
- newEvent = string, 주문이 발동하는 이벤트 이름, 주로 버프 유형.
- teleport = bool, 선택한 위치로 텔레포트.
- explore = double, 현재 타일 및 인접 타일 정찰.
3.28. Blueprint
도면(블루프린트) 엔티티 메커닉.
- item = string, 제작할 아이템 이름.
- build = string, 건설할 건물 이름.
- costName1 = string, 제작에 필요한 아이템 1 이름.
- costNum1 = double, 아이템 1 필요 수량.
- costName2 = string, 아이템 2 동일.
- costNum2 = double, 아이템 2 동일.
- costName3 = string, 아이템 3 동일.
- costNum3 = double, 아이템 3 동일.
3.29. Cost
가격 컴포넌트, 엔티티를 사고팔 수 있음을 정의합니다.
- raw = double, 수정자 제외 기본 가격. 구매가와 판매가는 이 값을 기준으로 계산.
3.30. Event
이벤트 컴포넌트.
- uniq = bool, 고유 이벤트. 같은 이름의 이벤트가 다시 발생하면 이전 것을 삭제.
- rndEvent = bool, 랜덤 이벤트 여부.
- nextEvent1 = string, 현재 이벤트 종료 후 시작될 첫 번째 이벤트.
- nextEvent2 = string, 현재 이벤트 종료 후 시작될 두 번째 이벤트.
- castType = string, 주문 강화 효과 유형, 동일 유형을 덮어씀.
3.31. Proc
프록(확률) 메커닉 컴포넌트, 예: 질병 발생 확률.
- addEvent = string, 확률 발동 시 실행되는 이벤트.
3.32. ProcMod
엔티티가 프록 확률에 영향을 줄 수 있게 하는 컴포넌트.
- proc = string, 이 컴포넌트가 영향을 주는 프록 이름.
- chance = double, 영향력 크기, 일부 기능은 코드 내부에 있음.
- dependsLevel = bool, 엔티티 레벨 의존 여부.
3.33. Usable
일회용 효과 컴포넌트, 예: 물약. '사용' 액션으로 활성화됩니다.
- stat = string, 효과가 영향을 주는 스탯 이름.
- skill = string, 효과가 영향을 주는 스킬 이름.
- nowBonus = double, Total.now 필드에 영향을 주는 보너스.
- maxBonus = double, Total.max 필드에 영향을 주는 보너스.
- cure = bool, 질병 효과 치유 여부.
3.34. Drankable
맵 위 오브젝트(호수, 오아시스 등)를 마실 수 있게 하는 컴포넌트.
3.35. Sphinx
맵 퀘스트 컴포넌트, 스핑크스. 파라미터는 지역 레벨을 기반으로 자동 결정.
3.36. Living_tree
맵 퀘스트 컴포넌트, 살아있는 나무. 파라미터는 지역 레벨을 기반으로 자동 결정.
3.37. Vision
플레이어 캐릭터가 해당 엔티티가 있는 타일에 진입하면 확대된 맵 반경을 제공하는 맵 오브젝트 메커닉.
- explore = int, 정찰 반경. 1 - 기본 정찰, 2 - 1타일 확장 정찰.
3.38. Remains
유해(잔해) 컴포넌트로 엔티티를 정의. 이런 엔티티는 언데드로 변환 가능.
3.39. Audio_comp
특정 엔티티 유형에 따라 사운드를 재생하는 컴포넌트.
- click = string, 엔티티 클릭 시 사운드, 액션과 주문에 사용.
- added = string, 엔티티 생성 시 재생되는 사운드, 이벤트에 사용.
- ambient1 = string, 환경음, 트랙 1.
- ambient2 = string, 환경음, 트랙 2.
- ambient3 = string, 환경음, 트랙 3.
- process = List(string), 액션 실행 중 재생되는 사운드 이름 목록.
- waits = List(double), 사운드 재생 간 대기 시간 목록.
- finish = string, 액션 완료 사운드.
- rndProcess = bool, 재생 중 약간의 랜덤 효과.
3.40. Childs
새 엔티티를 재귀적으로 생성하는 컴포넌트.
- list = List(Entity), 특정 엔티티에 자동 생성되어 연결되는 자식 목록.
3.41. Preds
특정 엔티티에 대한 액션을 생성하는 컴포넌트. 대부분의 엔티티는 게임 코드에서 정의됩니다.
- list = List(string).
3.42. Equip
이 아이템을 캐릭터에게 장착할 수 있음을 나타내는 태그 컴포넌트.
3.43. Res
해당 엔티티가 자원임을 나타내는 컴포넌트. 툴팁, 애니메이션, 게임 요약에 필요.
3.44. TurnAct
매 게임 시간 틱마다 검사해야 하는 엔티티를 나타냄, 예: Total 및 Duration 컴포넌트용.
4. 리스트
list.json 파일에는 엔티티나 컴포넌트가 아닌 데이터 섹션이 포함되어 있습니다. 게임 내 콘텐츠 생성에 사용되는 여러 리스트를 정의합니다.
4.1. RndGoodEvents
게임 시작 시 즉시 생성되는 긍정적 랜덤 이벤트 목록.
4.2. RndEvents
게임 진행 중 생성될 긍정/부정 랜덤 이벤트 목록.
4.3. Generator_dungeon_addons_physical
물리 데미지 던전에 생성될 확장(addon) 목록.
4.4. Generator_dungeon_addons_magical
마법 데미지 던전에 생성될 확장(addon) 목록.
4.5. Generator_ruins_addons
유적에 생성될 확장(addon) 목록.
4.6. Generator_settlement_levels
지역 레벨과 정착지 엔티티 이름 간의 대응 목록, 예: 'lvl1':'Village'는 1레벨 지역에 마을 유형 정착지가 생성됨을 의미.
4.7. Generator_rar_metals
지역 레벨과 광상 이름 간의 대응 목록, 예: 'lvl2':'Deposit_tin'은 2레벨 지역에 주석 광상이 생성됨을 의미.
4.8. Generator_mages
지역 레벨과 마법사 탑 수호 마법사 이름 간의 대응 목록, 예: 'lvl3':'Priestesses'는 3레벨 지역에 여사제가 생성됨을 의미.
4.9. LevelMobs_
지역 레벨별 유닛 목록. 던전 클리어 시 포로 해방 또는 유적 조사 시 플레이어가 획득하는 유닛.
4.10. Crafter_start, Lord_start, Mage_start,
GameClass 컴포넌트의 learnList 필드에서 각 게임 클래스가 시작 시 받는 아이템의 다양한 목록. 아이템 수는 learnNum 필드에서 생성.
- obj = string, 아이템 이름.
- min = double, 랜덤 최솟값.
- max = double, 랜덤 최댓값.
- chance = double, 해당 아이템 생성 확률.
- 다른 리스트를 만들어 다른 클래스에 연결할 수 있습니다. 다른 도면이나 주문을 학습시키고 싶을 때 유용합니다.
4.11. Gold_
지역 레벨에 따른 골드 생성량 리스트. 골드는 맵 내 모든 보상에서 50% 확률로 나타납니다. 문법은 4.10항을 참고하세요.
4.12. Loot_-
지역 레벨에 따른 보상 생성 리스트 그룹. 유닛, 던전, 유적에 적용됩니다. 유닛의 경우 50% 확률로 특정 아이템 드롭을 결정하며, 나머지 50%는 4.13항 리스트를 사용합니다. 문법은 4.10항을 참고하세요.
4.13. Warriors_, Defenders_, Mages_, Gatherers_, Crafters_,
지역 레벨 및 유닛 클래스에 따른 보상 생성 리스트 그룹. 유닛에만 적용됩니다. Loot_ 리스트의 확장이며 50% 확률로 클래스별 보상을 생성합니다. 예를 들어 마법사가 마법서와 지팡이를 더 자주 드롭하게 할 수 있습니다. 문법은 4.10항을 참고하세요.
4.14. Shop_, Books_
지역 레벨별 리스트, 예: Books5 또는 Shop6. 상점 품목 생성에 사용됩니다. 문법은 4.10항을 참고하세요. 이 리스트는 Shop 컴포넌트의 type 필드에서 정의되며, 탑의 경우 게임 코드에서 생성됩니다.
