모드 설치·추천 가이드: 구조·콘솔·개발 팁
Mods는 Mindustry에서 콘텐츠와 동작을 추가하거나 변경합니다 — 새로운 블록, 아이템, 액체, 유닛, 섹터, 행성 및 스크립팅 훅 등을 통해 커뮤니티 제작 게임플레이, 시각효과 및 맵을 가능하게 합니다. 이 페이지는 모드가 어떻게 구성되는지, 일반적으로 무엇을 포함하는지, 접근하거나 개발하는 방법, 그리고 사용에 대한 실용적인 팁을 요약합니다.
모드가 포함할 수 있는 것
- 새로운 블록(벽, 포탑, 공장, 전력 블록,
컨베이어, 특수 목적 블록). 커뮤니티 예제에 표시된 예시 유형: 커스텀 벽, 벽 타일 및 방어용 블록.
- 새로운 아이템과 액체(자원, 연료, 커스텀 액체와 같은 유체).
- 새로운 탄환/탄종 및 포탑 탄약 매핑(탄환을 추가하거나 복사하고 포탑에 할당할 수 있음).
- 새로운 유닛 및 유닛 공장.
- 새로운 행성, 섹터 및 섹터 생성기(프로시저로 생성된 섹터를 대체하거나 보강하는 숨겨진 또는 커뮤니티 제작 섹터 포함).
- 블록용 시각 자산 및 드로우 레이어(지역, 그림자, 추가 드로우 레이어).
- 사용자 정의 동작을 위한 스크립팅, 핸들러 및 프로세서(예: Java/JavaScript 콘텐츠 파싱 포함).
- 모드 쪽 오버라이드 및 연동 블록 동작으로 아이템, 액체 및 전력 취급을 다른 타일로 전달.
일반적인 기술 패턴과 API
- 콘텐츠 확장: 모드는 일반적으로 기본 클래스를 확장하여 새로운 콘텐츠를 만듭니다(예: 커스텀 벽을 만들기 위해 Wall을 확장하거나 공장을 위해 GenericCrafter를 확장). 콘텐츠를 생성할 때 생성자는 name, descriptions 및 solid 같은 플래그를 설정합니다.
- 기존 콘텐츠 복사 및 수정: 탄환, 탄종 또는 블록을 복사하여 필드(damage, visuals, requirements 등)를 수정하고 등록할 수 있으며, 원본을 변경하지 않습니다.
- 아이템/액체 수락 및 처리: 블록은 acceptItem/handleItem 및 acceptLiquid/handleLiquid을 오버라이드하여 연동 타일로 위임하거나 사용자 정의 라우팅 로직을 구현할 수 있습니다. 전력 훅은 마찬가지로 addPower 호출을 연동 타일로 위임할 수 있습니다.
- 그리기 및 레이어: 블록은 region을 정의하고 추가 드로우 레이어(layer2)를 지정하거나 시각을 위해 커스텀 그림자 영역을 지정할 수 있습니다.
- 건설 가시성 및 요구사항: 블록은 buildVisibility, requirements, buildTime 및 size 필드를 포함하여 언제/어떻게 나타나는지와 어떻게 건설되는지를 제어합니다.
섹터, 행성 및 맵 콘텐츠
- 모드는 완전한 섹터와 행성을 추가할 수 있습니다. 커뮤니티 제작의 "숨겨진" 공격 맵은 일부 모드 캠페인에서 사용되며 시드의 프로시저 생성 섹터를 대체합니다; 저자들은 자원 및 방어에 대한
메모를 태그하는 경우가 많습니다(예:
전격 지뢰가 풍부한 맵,
플라스터늄/
위상 벽로 구성된 엔드게임 방어 등).
- 행성은 테스트할 때 콘솔 플래그를 통해 접근 가능하거나 표시되도록 만들 수 있습니다(예: Planets.
.accessible = Planets. .alwaysUnlocked = true).
모드 개발: 언어와 도구
- Java와 JavaScript는 모드 생성에 지원됩니다. 모더 워크플로우는 핵심 변경을 위해 Java를 사용하거나 콘텐츠 JSON과 유사한 생성을 위한 ContentParser 스타일 스크립트를 사용할 수 있습니다.
- 필수 모드 자산: 아이템, 액체, 블록, 유닛, 탄환, 행성/섹터 정의 및 현지화 번들(name/description) 같은 정의가 일반적입니다.
- 초보자는 처음부터 다시 만들기보다는 예제 콘텐츠(벽, 포탑, 탄환)를 복사하고 편집하는 것부터
시작하는 것이 좋습니다. - 배우면 유용한 모딩 영역: 아이템 & 액체, 공장(GenericCrafter), 생산/전력 블록, 포탑 드로잉 파트, 효과/사운드/상태, 유닛/무기/능력, 행성/섹터/생성, 그리고 게임 코드에서 클래스/필드 찾기.
- 도구와 흐름: 많은 모더는 Java와 JavaScript(JavaJS)를 오가며 적절할 때 커뮤니티 도구(ACD, ContentParser)를 사용합니다.
모드 설치 및 접근
- Android에서는 공식 릴리스와
베타 빌드를 Google Play를 통해 이용할 수 있습니다(최신 빌드를 얻으려면 베타 테스터가 되세요). iOS 테스트 빌드는 TestFlight로 배포됩니다.
- 일부 모드 콘텐츠 또는 숨겨진 아이템/행성은 개발자 콘솔(F8 누름)을 통해 행성이나 오브젝트 가시성 플래그를 true로 설정하여 잠금 해제하거나 보이게 할 수 있습니다.
- 공식-모드 콘텐츠: 일부 모드는 개발자에 의해 작성되어 커뮤니티 내 "공식 모드"로 배포됩니다; 이들은 모드 목록에 나타나지만 커뮤니티 모드처럼 동작합니다.
예제 스니펫과 패턴
- 기존 포탑의 탄약 테이블에 커스텀 탄환을 할당하기(JavaScript 스타일):
- 예시: 블록.duo.ammoTypes.put(Items.pyratite, 블록.hail.ammoTypes.get(Items.pyratite))
- 탄환을 복사하고 속성 변경하기:
- 예시 패턴: bullet = 블록.hail.ammoTypes.get(Items.graphite).copy(); bullet.damage = 200; 블록.hail.ammoTypes.put(Items.titanium, bullet)
- 최소한의 커스텀 벽 정의(JavaScript 유사):
- 예시 패턴은 Wall을 확장할 때 region, health, category, size, requirements, buildTime, icons 및 description 설정 방법을 보여줍니다.
모범 관행과 커뮤니티 규범
- 가능하면 기존 콘텐츠를 재사용하고 복사하여 게임 밸런스와 시각적 호환성을 유지하세요.
- 번들(Bundles)에 현지화 키(block.[name].name 및 block.[name].description)를 보관하여 번역을 지원하세요.
- 섹터와 행성을 공개하기 전에 콘솔 가시성 플래그로 테스트하세요.
- Java로 코딩할 수 있다면 버그에 대해 이슈 리포트나 풀 리퀘스트로 기여하세요; 번역, 토론 및 피드백을 위한 커뮤니티 채널에 참여하세요.
- 복잡한 연동 블록을 만들 때는 오버라이드한 메서드가 accept/handle 함수와 전력 라우팅을 연동 타일로 제대로 위임하도록 하여 공급망이 중단되지 않게 하세요.
모드가 사용되는 곳
- 모드는 커스텀 서바이벌 맵, 커뮤니티 제작 공격 섹터, 새로운 캠페인 콘텐츠 및 제작자를 위한 품질 개선 도구에 사용됩니다.
- 일부 공식 및 커뮤니티 모드는 애드온으로 패키징되어 모드 브라우저나 외부 호스팅을 통해 배포됩니다.
이 가이드는 Mindustry 모드를 사용하거나 만들 때 마주치게 될 일반 구조와 워크플로우를 다룹니다: 콘텐츠 확장, 자산 및 동작 오버라이드, 섹터/행성 추가, 그리고 테스트와 배포를 위한 실용적 단계들.