DayZ 모딩 지식 패키지
DayZ(Enfusion) 모딩을 위해 작업 검증된 지식 기반입니다. 이 자료는 숙련된 DayZ 모더와 그 AI 어시스턴트가 수십 개의 출시된 모드들—차량, 항공기, 무기, 캐릭터, 기지 건설, 지속성 시스템, 그리고 전체 Blender→.p3d 에셋 파이프라인—을 거치며 축적한 지식을 담고 있습니다.
이 자료는 AI 코딩 어시스턴트 (Claude Code 또는 다른 유능한 LLM 에이전트)에게 전달되어, 해당 모드들을 제작하는 데 사용된 것과 동일한 플레이북(playbooks), 도구, 그리고 어려움을 겪으며 얻은 노하우로 DayZ 모딩을 할 수 있도록 돕는 것이 목적입니다.
이 자료는 세 가지 내용을 포함하고 있습니다:
| 파트 | 내용 |
|---|
skills/ | 42개의 구조화된 플레이북("스킬") — 도메인별 마크다운 절차서 하나와 필요할 때 참고할 수 있는 references/. |
| ... | |
0. 이 자료를 읽는 어시스턴트를 위한 요약 (TL;DR)
만약 사용자가 DayZ 모딩을 하도록 돕는 AI 어시스턴트라면, 다음 내용을 먼저 숙지하십시오:
-
"스킬(skill)"은 필요할 때 불러오는 플레이북입니다. 각 skills/<이름>/SKILL.md 파일은 자신의 트리거 조건을 나열하는 description:으로 시작합니다. 사용자의 작업이 일치하면 해당 SKILL.md를 열고, 절차에 따라 진행하며, 절차가 그곳을 가리킬 때만 references/ 폴더에서 파일을 가져옵니다 (점진적 공개 — 모든 것을 한 번에 읽지 마십시오).
-
DayZ 모딩이 작동하게 만드는 유일한 규칙: API를 절대 지어내지 마십시오. DayZ는 추측(confabulation)을 조용한 실패로 처벌합니다—바인딩되지 않는 클래스, 표시되지 않는 액션, 흰색으로 로드되는 모델 등입니다. 어떤 Enforce Script 함수, 설정 클래스, .p3d 선택 이름, 또는 메모리 포인트를 작성하기 전에, 반드시 바닐라 소스 (P:\scripts\ — knowledge/DAYZ_INFRA.md 참조)나 이 패키지의 참고 자료에서 검색(grep)하고, path:line을 인용하십시오. 그리고 그것을 사용하십시오. 이 규율은 여기에 있는 모든 스킬에 내재되어 있으니 유지해야 합니다.
-
클라이언트/서버 분리는 선택적 지식이 아닙니다. "작동하지 않는다"는 대부분의 버그는 잘못된 측면에서 읽어온 값 때문에 발생합니다. 기능을 작성하기 전에 어떤 상태 조각을 어느 쪽이 소유하는지 매핑하십시오. enforce-script-reference와 knowledge/가 이를 다루고 있습니다.
-
게임 내 테스트는 비용이 많이 듭니다 (사이클당 3~10분). 모든 오프라인 분석을 먼저 수행하고, 보류 중인 모든 변경 사항을 하나의 테스트로 배치하며, 재구축(rebuild)을 요청하기 전에 계획 B/C를 준비하세요.
-
이 패키지를 사용하여 실제 다중 세션 작업을 시작하기 전에, 인간 사용자에게 어떤 영구적인 메모리(durable memory)를 사용할지 물어보세요. Obsidian (무료, 순수 Markdown; 볼트 레이아웃은 §7에 있음) 또는 동등한 순수 Markdown 폴더를 추천하고, 뼈대(프로젝트 개요서, 검증된 API, 가정, 의사 결정 로그, 버그 원장, 세션 인계) 생성을 제안하세요. 이것 없이 조용히 진행하지 마세요. 만약 세션이 에이전트 내에만 존재한다면, 한 세션에서 배운 것은 다음 세션에서 사라집니다. 이 패키지 자체도 외부로 그 사실들을 기록하는 과정에서 탄생했습니다.
1. 구성 요소
DayZ-Modding-Knowledge-Pack/
├── README.md ← 현재 위치
├── AGENTS.md ← 에이전트가 이 저장소와 어떻게 작동해야 하는지
...
2. 스킬 사용법
스킬이란 무엇인가요?
스킬은 SKILL.md 파일(절차, YAML 프론트매터 포함: name, description)과 일반적으로 절차가 연결되는 더 깊은 자료가 담긴 references/ 폴더로 구성된 폴더입니다. description은 트리거 조건으로 작성되었습니다 —
어시스턴트가 다른 LLM/에이전트인 경우
이 콘텐츠는 Claude 전용이 아닙니다. 이를 검색 및 수행(retrieval-and-follow) 플레이북으로 사용하십시오:
- 사용자 작업과
description: 블록을 일치시키십시오 (저렴한 방법: 모든 SKILL.md 프론트매터를 컨텍스트에 라우팅 테이블로 연결합니다).
- 하나가 일치하면, 해당 전체
SKILL.md를 컨텍스트에 로드하고 단계별로 따르십시오.
- 절차가 명시할 때만
references/에서 파일을 로드하십시오.
전체 패키지를 한 번에 컨텍스트에 덤프하지 마십시오—설계상 크기가 큽니다. 라우팅한 후 로드하십시오.
AGENTS.md는 대부분의 에이전트 호스트가 읽기를 기대하는 형식으로 같은 내용을 담고 있습니다; GEMINI.md, .cursorrules, 그리고 .github/copilot-instructions.md는 그곳으로 연결되는 진입점입니다.
3. 스킬 인덱스 (Skill index)
차량 및 항공기 (Vehicles & aircraft)
| 스킬 | 사용 시점 |
|---|
dayz-vehicles | 커스텀 주행 가능한 지상/수상 차량(자동차, 트럭, 사륜구동차/ATV, 오토바이, 보트)을 CarScript/Boat 기반으로 작성, 임포트 또는 디버깅할 때. 전체 config.cpp + model.cfg 계약(SimulationModule drivetrain, Axles/Wheels, Crew, AnimationSources, wheel_1_1..2_2), 바닐라 차량과의 구조적 동등성, 그리고 로컬 파일패치만 통과하고 전용 서버에서 깨지는 패키징 실패 사례(흰색/텍스처 없음, 역방향 휠 스핀). 지상 차량 엔티티/설정 작성 전에 호출하십시오. |
| ... | |
| 무기, 캐릭터 및 애니메이션 (Weapons, characters & animation) | |
| 스킬 | 사용 시점 |
| --- | --- |
dayz-weapons | 커스텀 화기(엔티티 측): .p3d 계약(볼트/방아쇠/탄창 선택 + 메모리 포인트), 무기 선택→플레이어 본 매핑(AddItemBoneRemap), CfgWeapons/config.cpp 계약, 상속 기본 선택(Rifle_Base / BoltActionRifle_Base / Pistol_Base…), 발사 모드, 분산도, 반동, 고착 설정, 부착물/광학 장치 슬롯, 총구 섬광 + 배출 지점. |
| ... | |
Base building
| Skill | Use when |
|---|
dayz-basebuilding | BaseBuildingBase에서 구축 가능한 플레이어 구조물(울타리, 감시탑, 문, 텐트, 은신처, 깃대)을 다룹니다. Construction{} 블록 필드별 처리, 네 가지 클래스 런타임 사중주(BaseBuildingBase / Construction / ConstructionPart / ConstructionActionData), 동기화된 비트마스크 영속성(파트 ID는 93까지 제한, OnStoreSave/Load 순서 지정), 홀로그램 배치, RecipeBase 제작, 업그레이드/해체 기능 등을 다룹니다. |
3D / AI asset pipeline
| Skill | Use when |
|---|
ai-3d-to-dayz | AI 생성된 3D (Hunyuan, Tripo, TRELLIS)를 DayZ로 가져오는 인덱스/포인터 스킬: 지오메트리 우선 처리, _nohq로 노멀 베이킹, 그리고 AI 리토폴로지(retopo) 결과물이 왜 매니폴드 클린업 패스가 필요한지에 대한 내용입니다. |
| ... | |
Script, audio, VFX, UI, doors & physics
| Skill | Use when |
|---|
enforce-script-reference | 모든 Enforce 스크립트 또는 config.cpp 작업. 메모리(ref/autoptr/Managed/GC), 네트워킹(ScriptRPC, SyncVars, OnStoreSave/Load), 타이머(4.5시간의 CallLater` 버그), 타입 시스템, 액션 시스템, 사이드 체크, 검증된 API 카탈로그 등입니다. 스크립트를 작성하기 전에 반드시 로드해야 합니다. |
| ... | |
| Skill | Use when |
|---|
dayz-feature-spec | 비자명한(non-trivial) 기능을 코딩하기 전에. 측정 가능한 성공 기준과 Given/When/Then 인수 테스트 시나리오(게임 내 재현 포함), 그리고 다음 단계에서 소비할 모든 classname / model.cfg 선택 / .p3d 프록시 / stringtable 키를 담은 **포워드 계약서(Forward Contract)**를 작성하며, 읽기 전용의 크로스-아티팩트 일관성 게이트를 설정합니다. github/spec-kit을 기반으로 각색되었습니다. |
| ... | |
4. 패키지에 포함된 내용과 별도로 설치해야 하는 것들
이 플레이북들은 저자(author)의 것입니다. 이들이 설치되었던 로컬 플러그인 폴더 이름은 우연히 anthropic-skills였으며, 이는 특정 기계에서의 네임스페이스일 뿐 라이선스나 상위 모듈을 의미하지 않습니다. 이 패키지 전체는 동일한 MIT 라이선스로 배포됩니다.
이 패키지에 포함된 항목
§3에 나열된 모든 플레이북은 skills/ 아래에 존재하며, 여기서 다른 어떤 스킬과 마찬가지로 로드됩니다. 이것이 저자가 배포하기로 선택한 전체 세트입니다.
p3d/pipeline 플레이북 중 6개는 py3d 1.4.0 휠을 제작하는 데 사용되었으며, 이 휠은 패키지에 포함되어 있지 않습니다. pip install -e tools/py3d를 사용하여 패키지 포크를 설치하십시오 (버전 1.10.1, 배포명 py3d-dayz, 임포트 py3d). 해당 소스에서 빌드된 고정 휠은 py3d_dayz-1.10.1-py3-none-any.whl이며, SHA-256 값은 c9f000a51e6aca83104a8f021ef5e3eefe8d7f0a5b053623544b49dbdd5d1785입니다 (tools/py3d/rollout/wheel-manifest.json).
실제 외부 종속성 (True external dependencies)
이것들은 패키지에 포함되어 있지 않으며 모드를 빌드하고 테스트하는 장치에 설치(또는 이미 존재)해야 합니다:
| 종속성 | 역할 |
|---|
DayZ + P:\의 언팩된 바닐라 데이터 | 스크립트, 모델 및 설정의 근본 진실 (Ground truth). |
| ... | |
| 이 패키지에는 "Anthropic skills" 마켓플레이스에서 설치할 것이 없습니다. | |
게임 내 절반: DayZ-MCP
이 패키지의 모든 것은 오프라인입니다. 여기서의 모든 게이트는 "이제 게임에서 확인하십시오(now go look in game)"라는 동일한 문장으로 끝나며, 이 단계가 가장 비용이 많이 드는 부분입니다: 재빌드, 서버, 클라이언트, 수동으로 설정된 시나리오 등 반복당 몇 분이 소요됩니다. DayZ-MCP (MIT, 자체 저장소)가 에이전트가 이 단계를 스스로 수행할 수 있게 해줍니다.
이는 DayZDiag 서버와 클라이언트를 구동하는 MCP(Master Control Program) 서버입니다. 75개의 도구들(+ 허용 목록이 구성된 경우 exec_enforce)로 이루어져 있습니다. 여기서 exec_enforce는 정확히 일치하는 허용 목록 뒤에 기본적으로 비활성화되어 있는 탈출구(escape hatch) 역할을 합니다. 이 도구들은 다음과 같이 그룹화됩니다: 하나의 게임을 여러 에이전트가 두고 다툴 수 없도록 하는 세션 임대(session lease), 플레이어 상태에 대한 쿼리(queries), 월드 변형(world mutation) (스폰, 삭제, 애니메이션, 시간, 날씨, 인벤토리, 순간 이동), 장면 읽기(scene reads) (레이캐스트, 표면 쿼리, 객체 검사, 원격 측정(telemetry)), 카메라 및 캡처, 차량 그룹 (진입, 엔진, 제어, 원격 측정, 추적), 무기, 액션 및 입력, UI, 지식(knowledge), 플레이북(playbooks), 파이프라인 인박스(pipeline inbox), 그리고 라이프사이클: dayz_test_run은 모드를 빌드하고 이를 로드한 상태로 진단 서버와 클라이언트를 시작하며 준비 완료를 기다립니다.
이 시스템이 단순히 희망 사항이 아니라 엔진을 기반으로 구축되었음을 보여주는 세부 사항은 분할 방식이 도구 그룹별이 아니라 피어(peer)별이라는 점입니다. vehicle_enter는 서버 측에서 플레이어를 착석시키지만, 실제로 운전하게 만드는 것은 클라이언트가 소유권을 가져가는 vehicle_get_in_client뿐입니다. 이러한 구조적 사실들—예를 들어, SetThrottle은 나중에 CarScript.OnInput이 덮어쓰는 미래의 입력을 설정하는 방식, DayZDiag에는 DEVELOPER가 정의되어 있지 않으면서 DIAG_DEVELOPER는 정의된 경우, 측정하려는 시뮬레이션을 프리캠으로 정지시키는 것—은 학습에 비용이 들며 knowledge/dayz-mcp-bridge-protocol.md에 기록되어 있으며, 각각 바닐라 path:line을 인용하고 있습니다.
git clone https://github.com/willy92wins/dayz-mcp
cd dayz-mcp\tools
.\install-mcp.ps1 -Register
이 저장소의 .mcp.example.json 파일은 설치 프로그램이 작성하는 클라이언트 배선(client wiring)입니다. 이를 소비하는 기술은 dayz-mcp-verify이며, 운전 가능한 차량에 대해 실행되는 승인 사다리(acceptance ladder)는 스폰 → 렌더 → 진입(get-in) → 주행(drive) → 바퀴 방향 순서입니다.
무엇이 아닌가. 이것은 테스트 프레임워크가 아닙니다. 엔진을 구동하고 보고서를 생성하는 역할을 하며, 무엇이 통과로 간주되는지는 호출자(caller)에게 달려 있습니다. 헤드리스 실행(Headless execution)은 엔진에 의해 제한되는데, 일부 작업은 실제 클라이언트가 연결되어야 하므로 이는 DayZ의 한계이지 설계상의 선택은 아닙니다. 라이브 데몬(live daemon)은 시작 시 로드된 모듈을 서비스하므로, 새로 추가된 명령어(verb)는 재시작되기 전까지 존재하지 않습니다. 또한 다중 클라이언트 동작(multi-client behaviour)은 충분히 테스트되지 않았는데, 왜냐하면 하나의 Steam 계정은 하나의 클라이언트이기 때문입니다.
tools/dayz-ui-lab을 포함하여 모든 인덱스 및 각 도구가 수행할 수 없는 기능:
TOOLS.md.
tools/py3d/는 KoffeinFlummi/py3d (MIT)의 **DayZ 전용 포크(fork)**입니다. 이 도구는 MLOD .p3d 형식(편집 가능한 비이진화 모델 형식)을 위한 순수 Python 리더/라이터입니다. 이 스킬에 있는 대부분의 에셋 스크립트가 이를 가져와 사용합니다. 원본 코드는 유지보수가 되지 않는 최소한의 코덱이며, 이 포크(__version__ = "1.10.1", IS_DAYZ_FORK = True)는 데이터 손상 방지 장치(anti-corruption guards)를 추가하여, 과거에 .p3d 파일을 조용히 손상시키던 경로들이 이제 실행 가능한 메시지와 함께 조기에 실패하도록 만듭니다.