◆Cobblemon Wiki

애드온 제작

데이터팩화 가능한 기술 효과

서문

버전 1.7부터 Cobblemon은 데이터 팩을 통해 배틀 엔진 안의 특성과 기술 효과를 추가하거나 교체하는 기능을 지원합니다. 필수는 아니지만, 효과를 추가하거나 교체하기 전에 TypeScript 또는 JavaScript에 대한 기본적인 이해가 있는 것을 권장합니다.

데이터 이해하기

데이터 팩에 무엇을 추가해야 하는지 이해하려면 Cobblemon이 포크한 포켓몬 Showdown 엔진을 참고해야 할 가능성이 큽니다. Cobblemon은 이 저장소의 TypeScript를 JavaScript로 트랜스파일한 버전을 사용해 배틀 엔진을 실행합니다. 그래서 데이터 팩에 추가할 파일은 기술/특성 이름과 현지화 같은 UI 데이터를 담는 파일을 제외하면 모두 .js 형식이며 JavaScript를 사용합니다.

파일에 무엇이 들어가야 하는지 배우는 가장 쉬운 방법은 기존 특성과 기술을 참고하는 것입니다. 각각 data/abilities.ts와 data/moves.ts에서 찾을 수 있습니다.

JavaScript 방식

Showdown 저장소의 파일을 직접 수정하는 대신, 자신의 마인크래프트 인스턴스 안 showdown 폴더에 Cobblemon이 생성한 파일을 살펴볼 수도 있습니다. 거기서 기존 생성 JavaScript를 읽고, 기본 Showdown 효과를 참고해 자신만의 .js 파일을 작성할 수 있습니다.

이 방식은 기존 기술의 위력 변경처럼 아주 단순한 수정에는 효과적입니다. 하지만 복잡한 커스텀 로직이 필요하거나 편집기에서 더 나은 lint/타입 검사를 받고 싶다면 아래의 TypeScript 방식이 더 효과적일 수 있습니다.

TypeScript 방식

저장소를 클론(다운로드)한 복사본에 커스텀 로직을 작성하고, TypeScript를 사용해 기존 테이블 안에서 수정하거나 새 효과를 추가합니다. 이후 Node(https://nodejs.org/en) 명령어 node build를 실행하면 테이블이 JavaScript로 트랜스파일되어 dist 폴더에 출력됩니다. 그런 다음 컴파일된 JavaScript 테이블(dist/data/abilites.js 등)에서 변경 사항을 추출해 데이터 팩의 개별 .js 파일에 넣으면 됩니다. 정확한 경로와 형식은 아래 각 섹션을 참고하세요.

**TypeScript 환경에 익숙하다면 TypeScript 코드를 JavaScript로 변환하는 다른 방법도 많습니다. 이 방법은 lint와 타입 검사가 Showdown 환경 안에서 이루어지도록 보장하므로 가장 단순합니다.

변경 사항이 많다면 스크립트를 트랜스파일하고 각 파일에 자동으로 배치하는 스크립트를 작성하는 것도 도움이 될 수 있습니다. 기존 build 방식은 tools/build-utils.js 안에서 확인할 수 있습니다.**

데이터 파일 만들기

데이터 팩에 추가할 때 각 효과는 data/cobblemon/abilities 또는 data/cobblemon/moves 폴더 안의 개별 .js 파일이어야 합니다. 또한 파일 안에는 //로 시작하는 주석 등 어떤 주석도 없어야 합니다. 파일 이름은 특성의 고유 ID로 사용할 값이면 되며, a-z | 0-9 | - | _ 문자만 사용할 수 있습니다(예: my-ability.js).

스크립트 파일은 반드시 여는 중괄호 {로 시작하고 닫는 중괄호 }로 끝나야 합니다. 따라서 기존 효과를 복사할 때 효과의 내부 이름을 포함하지 않도록 주의해야 합니다. Cobblemon은 데이터 팩 안 효과 파일 이름을 기준으로 기술의 고유 ID를 자동으로 채웁니다.

예시

아래는 intimidate.js 파일에 넣는 아주 단순한 특성 수정 예시입니다. 위협이 공격 대신 특수공격을 낮추도록 바꿉니다:

{
   onStart(pokemon) {
     let activated = false;
     for (const target of pokemon.adjacentFoes()) {
       if (!activated) {
         this.add("-ability", pokemon, "Intimidate", "boost");
         activated = true;
       }
       if (target.volatiles["substitute"]) {
         this.add("-immune", target);
       } else {
         this.boost({ spa: -1 }, target, pokemon, null, true);
       }
     }
   },
   flags: {},
   name: "Intimidate",
   rating: 3.5,
   num: 22
}

보듯이 기존 위협 효과의 모든 로직을 복사하되, atk: -1을 spa: -1로 바꿨습니다.

아래는 대부분의 효과를 freezedry에 기반한 커스텀 기술 예시입니다:

({
   accuracy: 100,
   basePower: 70,
   category: "Special",
   name: "Bug Spray",
   pp: 20,
   priority: 0,
   flags: { protect: 1, mirror: 1, metronome: 1 },
   onEffectiveness(typeMod, target, type) {
     if (type === "Bug")
       return 1;
   },
   secondary: {
     chance: 10,
     status: "psn"
   },
   target: "normal",
   type: "Water",
   contestType: "Beautiful"
 })

이 기술은 freezedry 블록에서 복사한 코드에서 몇 가지만 바꿉니다:

  • name 필드는 이제 직접 만든 기술의 이름입니다.
  • onEffectiveness 블록 안의 타입을 "Bug"로 바꾸어 벌레 타입에게 효과가 굉장하도록 만듭니다.
  • 부가 효과의 상태 타입을 얼음에서 독으로 바꿉니다(”frz”에서 "psn").
  • 기술 타입은 이제 얼음이 아니라 물입니다.

변경을 마쳤다면 데이터 팩의 data/cobblemon/moves 폴더 안에 bugspray.js라는 이름으로 저장합니다.

필드

중요: num 필드

num 필드는 Showdown이 사용하는 숫자 ID라 조금 헷갈릴 수 있습니다. 위의 위협 변경처럼 기존 효과를 교체하는 경우에는 같은 ID 번호를 유지하는 것이 중요합니다. 완전히 새로운 효과라면 이 필드를 통째로 제거해야 합니다.

name 필드

기술/특성 문자열의 대부분은 데이터 팩의 현지화 파일에 의존하지만(아래 참고), Showdown 내부 이름을 지정하는 것도 여전히 중요합니다. 이 이름은 "fireblast"가 아니라 "Fire Blast"처럼 따옴표로 감싼 올바른 이름이어야 합니다.

문제가 되는 경우는 드물지만, Showdown이 이 이름을 사용해야 할 때 Cobblemon 메뉴에서 플레이어가 보는 이름과 일관되게 유지하는 것이 중요합니다.

기타 필드/함수

효과 안의 다른 대부분 필드와 함수는 이름만 봐도 의미를 알 수 있거나, Showdown 코드 안을 조금 파헤쳐야 합니다. 여기서는 TS/JS 이해가 중요하지만, 일반적인 프로그래밍 언어 하나를 알고 있다면 어느 정도 따라갈 수 있습니다.

일부 숫자 값은 예상과 정확히 다르게 동작할 수 있습니다. 무언가 이상하게 동작한다면 Showdown 코드에서 비슷한 효과를 확인해 그 값이 실제로 어떻게 처리되는지 살펴보세요.

확신이 없다면 비슷한 기존 효과를 바탕으로 커스텀 효과를 만드는 편이 전체적으로 문제와 혼란을 줄여 줍니다.

현지화

Cobblemon의 다른 애드온 수정 요소와 마찬가지로, 커스텀 효과가 올바르게 표시되도록 적절한 언어 파일을 추가해야 합니다. 이 파일들은 Cobblemon 파일의 assets/cobblemon/lang 안에 있으며, 애드온도 같은 구조를 가져야 합니다. 해당 디렉터리의 JSON 파일을 살펴보면 예시와 함께 교체해야 하는 이름/설명용 현지화 키를 확인할 수 있습니다.

이를 하지 않아도 애드온은 로드되지만, 항목이 없는 모든 효과는 Cobblemon 메뉴에서 cobblemon.move.bugspray 또는 cobblemon.ability.myability.desc 같은 태그로 표시됩니다.

기존 효과만 교체하고 설명이 여전히 정확하다면 기존 현지화 데이터를 다시 만들거나 덮어쓸 필요는 없습니다.

참고: 다른 많은 애드온 항목처럼 assets가 포함되면 애드온을 리소스 팩으로도 로드해야 합니다. 보통은 같은 zip을 데이터 팩과 리소스 팩 양쪽으로 로드하게 하는 것이 가장 쉽지만, 원한다면 개별 팩으로 분리해도 됩니다.

Addon Creation

튜토리얼

커스텀 포켓몬 만들기 모델 만들기 커스텀 스폰 만들기 발광 텍스처 애니메이션 텍스처 Texture Replacement 애니메이션 교체 리전 폼여러 시각 Variants 애니메이션에 소리 추가하기

Asset Files

리졸버 구 Poser 신 Poser 소리

데이터 Files

종 종 특징 종 특징 할당 종 추가 스폰 Detail Presets 스폰 Pool 월드 화석 Datapackable Move Effects

Properties

행동 스폰 조건 발전 과제