가장 정확하고 완전한 다세대 포켓몬 손상 계산기 패키지.
@pkmn/dmg
@pkmn
생태계와 호환되도록 처음부터 @smogon/calc
라이브러리의 영적 후계자이며 Pokémon Showdown 개발자들과 함께 확장 가능한 아키텍처를 기반으로합니다. @pkmn/dmg
기능은 아키텍처 및 정확성 개선 외에도 다음과 같습니다.
$ npm install @pkmn/dmg
또는 아래에 자세히 설명 된 바와 같이, 브라우저에서 @pkmn/dmg
사용하고 있고 시작하는 편리한 방법을 원한다면, unpkg ( @pkmn/dex
및 @pkmn/data
의존적이 필요합니다. @pkmn/dmg
) :
< script src =" https://unpkg.com/@pkmn/dex " > </ script >
< script src =" https://unpkg.com/@pkmn/data " > </ script >
< script src =" https://unpkg.com/@pkmn/dmg " > </ script >
@pkmn/dmg
의 기본 API는 State
취하고 Result
반환하는 calculate
함수입니다.
@pkmn/dmg
는 데이터 레이어 AGNOSTIC입니다. @pkmn/data
에 대한 의존성 덕분에 Pokémon Showdown 호환 Dex
-Type 구현이 @pkmn/data
의 Generations
생성자에게 제공되어야합니다 ( @pkmn/dex
는 권장됩니다. 여기서 선택하지만, 완전히 특징 지어지기 때문에 @smogon/calc/data
의 크기는 ~ 4 배이며 특정 응용 프로그램은 JSON 파일을 전제하여 불필요한 필드를 다듬을 수 있습니다).
State
의 도우미 기능, State#createPokemon
및 State#createMove
calculate
에 필요한 입력 데이터 구조를 초기화하는 권장 방법입니다. 이러한 기능은 기본 무결성 검사를 수행하면서 모든 필드를 지정하지 않아도되는 편리한 방법을 제공합니다. State
인터페이스와 호환되는 객체는 대신 제공 될 수 있지만, 이는 이미 자체 전투 상태 표현 (예 : @pkmn/client
)이있는 응용 프로그램과 관련이 있습니다.
import { Dex } from '@pkmn/dex'
import { Generations } from '@pkmn/data' ;
import * as dmg from '@pkmn/dmg' ;
const gens = new Generations ( Dex ) ;
const gen = gens . get ( 4 ) ;
const result = dmg . calculate (
gen ,
dmg . State . createPokemon ( gen , 'Gengar' , { item : 'Choice Specs' , nature : 'Modest' , evs : { spa : 252 } } ) ,
{
pokemon : dmg . State . createPokemon ( gen , 'Blissey' , { evs : { hp : 252 , spd : 252 } } ) ,
sideConditions : { spikes : { level : 2 } , stealthrock : { } } ,
}
dmg . State . createMove ( gen , 'Focus Blast' ) ,
{ weather : 'Sandstorm' , pseudoWeather : { } }
) ;
범위를 가진 inGen
헬퍼를 사용하여 더 단순화 할 수 있습니다.
const result = dmg . inGen ( gens . get ( 4 ) , ( { calculate , Pokemon , Move } ) =>
calculate (
Pokemon ( 'Gengar' , { item : 'Choice Specs' , nature : 'Modest' , evs : { spa : 252 } } ) ,
{
pokemon : Pokemon ( 'Blissey' , { evs : { hp : 252 , spd : 252 } } ) ,
sideConditions : { spikes : { level : 2 } , stealthrock : { } } ,
}
Move ( 'Focus Blast' ) ,
{ weather : 'Sandstorm' , pseudoWeather : { } }
) ;
) ;
위는 Side
또는 Field
조건이 지정되는 방법을 보여주는보다 진보 된 예입니다. 공동 사례는 다음과 더 유사하게 보입니다.
const result = dmg . inGen ( gens . get ( 4 ) , ( { calculate , Pokemon , Move } ) =>
calculate (
Pokemon ( 'Gengar' , { item : 'Choice Specs' , nature : 'Modest' , evs : { spa : 252 } } ) ,
Pokemon ( 'Blissey' , { evs : { hp : 252 , spd : 252 } } )
Move ( 'Focus Blast' )
) ;
) ;
calculate
에 의해 반환 된 Result
손상 롤, 반동 또는 배수/복구 정보, 회전 종료 잔류 데이터 및 세부적인 KO 기회 고장에 대한 정보가 @smogon/calc
되어 있습니다. 인간 친화적 인 텍스트가 제공됩니다). 친숙한 인간 친화적 인 출력은 Result
원하는 형식으로 인코딩하여 얻을 수 있습니다.
dmg
바이너리는 명령 줄을 통해 손상 계산을 수행하는 데 사용될 수 있습니다.
// FIXME improve these to match actual output and encoding
dmg +1 252 SpA Gengar @ Choice Specs [Focus Blast] vs. 0 HP / 172+ SpD Blissey --gen=4
+1 252 SpA Choice Specs Gengar Focus Blast vs. 0 HP / 172+ SpD Blissey: 362-428 (55.6 - 65.7%) -- guaranteed 2HKO after Leftovers recovery
$ dmg gengar [focus blast] vs. blissey gen:6
252 SpA Life Orb Gengar Focus Blast vs. 252 HP / 4 SpD Blissey: 263-309 (36.8 - 43.2%) -- 98.7% chance to 3HKO after Leftovers recovery
$ dmg gen=3 mence @ CB [EQ] vs. cune @ lefties
252+ Atk Choice Band Salamence Earthquake vs. 252 HP / 252+ Def Suicune: 121-143 (29.9 - 35.3%) -- guaranteed 4HKO after Leftovers recovery
calc.pokemonshowdown.com과 마찬가지로 CLI는 사전 정의 된 세트 및 휴리스틱에 의존하여 계산을 수행하기 위해 지정 해야하는 정보의 양을 최소화합니다. 구문 분석 문서는 구문을 자세히 설명합니다. dmg
실행하려면 선택 사항 @pkmn/smogon
종속성을 설치해야합니다.
필수는 아니지만 dmg
에 대한 첫 번째 위치 인수는 형식 ID (예 : gen7ou
또는 gen8anythinggoes
) 일 수 있으며, 이는 특정 형식에서 @pkmn/smogon
의 세트를 범위로 늘릴 수 있습니다 (VGC 또는 Little Cup 계산에 특히 유용합니다. ).
웹 브라우저에서 @pkmn/dmg
사용하는 권장 방법은 Bundler (웹 팩, 롤업, 소포 등)를 구성하여 이를 최소화하고 나머지 응용 프로그램과 함께 패키지하는 것입니다. 번들러를 사용하지 않으면 편의 index.umd.js
패키지에 포함되어 있습니다. script
태그에서 ./node_modules/@pkmn/dmg/build/index.umd.js
에 의존하면됩니다 (위의 UNPKG 바로 가기가 calc
하는 것). 또한 Generations
구현이 제공되어야하며 Calc를로드하기 전에 전에로드해야합니다.
< script src =" ./node_modules/@pkmn/dex/build/production.min.js " > </ script >
< script src =" ./node_modules/@pkmn/data/build/production.min.js " > </ script >
< script src =" ./node_modules/@pkmn/dmg/build/index.umd.js " > </ script >
@pkmn/dmg
@pkmn/dmg
상태 처리 및 'Appliers'개념 및 apply
기능은 아마도 이전의 손상 계산기에 비해 가장 큰 혁신 일 것입니다. @pkmn/dmg
의 응용 프로그램은 'geomancy'또는 'Extreme evoboost'와 같은 움직임에 대한 통계를 강화하는 능력이나 버튼을 켜는 토글 '켜기와 같은 물건을 포함하는 기존 계산기가 제공하는 임시 편의 기능에 대한 강력한 일반화입니다.
효과가있는 능력/조건/항목/이동은 해당 상태를 수정하여 피해 계산을 수행하는 데 사용되는 State
수정하기 위해 효과를 apply
할 수 있습니다. 'Swords Dance'와 같은 움직임이있는 세트는 편의 버튼으로 바뀔 수 있으므로 클릭하면 +2 공격 부스트를 제공하거나 노크의 효과를 apply
Pokémon의 항목을 제거 할 수 있으므로 UI에 유용합니다. 향후 계산 등을 apply
할 제한이 있습니다 - @pkmn/dmg
상태를 완벽하게 업데이트 할 수 있도록 전체 시뮬레이터 / 전투 엔진을 포함시키지 않습니다. apply
편의를위한 것입니다 - @pkmn/dmg
제공되는 State
와 관련하여 정확하고 포괄적이지만, apply
을 보장하지 않으면 항상 전투에서 발생한 정확한 State
초래하지는 않습니다.
@pkmn/dmg
핸들은 이전 계산기와 다르게 적중합니다 - 각 히트는 전체 손상 공식을 통해 실행됩니다 (특정 최적화 apply
감지 될 수 있지만). 때리다 . 이 디자인은 자연스럽게 부모의 유대 또는 멀티 하이트 움직임을 처리하지만 (파워 업 펀치의 공격 부스트로부터 히트 히트 또는 두 번째 부모의 채권의 두 번째 히트 사이에서 체력을 높이는 상호 작용 포함)는 또한 결과를 계산하기 위해 아비 아트라리 동작을 함께 묶을 수 있습니다. 일련의 공격 .
연쇄 처리 반복 과열 또는 Draco Meteor의 결과가 무엇인지 확인하고 싶지만 Scizor U -Turn에 Gengar Focus Blast와 같은 것들을 다루고 싶어하는 일반적인 사례는 동일한 대상의 모든 결과를 함께 연결하고 예상되는 KO를 연결할 수 있습니다. 공동 Result
의 기회는 정확히 같은 방식으로 처리됩니다. Breloom의 총알 씨앗이 처리됩니다. 극단적으로,이 디자인은 gluttony sitrus berry와 같은 시나리오를 몇 번 히트 한 후 발로 차게하거나 반동 후 공격자가 필요한 HP 범위로 떨어 뜨립니다. 사슬의 움직임은 보장 된 시나리오만을 다룹니다 (즉). 효과는 활성화 될 확률이 100% 또는 관련된 범위가 특정 이벤트가 발생할 것이라는 보장하기 때문에 발생하는 경우 만 이동 사이에만 apply
됩니다.
== TODO ==
@pkmn
패키지는 모드에 대한 일등석 지원을 제공 할 의도는 없지만 (비 캐논 데이터 또는 역학) @pkmn/dmg
@smogon/calc
보다 모드에 대해 훨씬 더 확장 할 수 있도록 신중하게 설계되었습니다. @pkmn/dmg
의 데이터 변경은 다음을 통해 달성 할 수 있습니다.
override
메소드는 기존 데이터에 필드를 수정하거나 추가 할 수 있습니다 (이것은 일부 @smogon/calc
의 생성자가 취하는 재정의 overrides
변수와 효과적입니다).@pkmn/data
가 exists
Generations
구현 (National Dex 또는 CAP에 유용함)@pkmn/dex
마무리하고 추가 데이터를 추가합니다 (참조 @pkmn/mods
) 수정 사항에 따라 귀하는 기본 포켓몬 역학의 일부 검증을 수행 할 때 State
메소드가 제공하는 편의 공장 방법을 사용하지 않을 수 있습니다. 그러나 이러한 방법을 사용하지 않고 항상 State
객체를 구축 할 수 있습니다.
@pkmn/dmg
알고있는 @pkmn/dex-types
필드 만 사용하므로 추가 데이터 필드는 문제를 일으키지 않아야합니다. 그러나 새로운 필드를 사용하려고하거나 다양한 역학의 동작을 단순히 변경하려면 기존 처리기 메커니즘을 확장하거나 무시할 수있는 선택적 handlers
매개 변수를 calculate
. 기존 내보내기 Handlers
개체를 기본으로 활용하기를 원할 것입니다.
유스 케이스에보다 광범위한 모딩 기능 (예 : 핵심 손상 흐름을 중심으로 변경할 수 있음)이 필요한 경우 사용 사례를 설명하는 문제를 열어주십시오. 충분한 정당화가 있다면, 알고리즘의 핵심 부분이 Handlers
와 같은 방식으로 분해되어 수정 가능할 수 있습니다.
@pkmn/engine
-pkmn 기고자@smogon/calc
-Honko, Austin 및 기고자 이 패키지는 MIT 라이센스의 조건에 따라 배포됩니다.