Calculadora de daños para todas las generaciones de Pokémon Battling.
Si actualmente está mirando Smogon/Damage-Calc y no una bifurcación, ¡este es el repositorio oficial del Pokémon Showdown! Calculadora de daños: https://calc.pokemonshowdown.com.
Este repositorio alberga tanto el paquete que implementa la mecánica de fórmula de daño central en cada generación ( @smogon/calc ), así como la lógica y el marcado para la interfaz de usuario oficial.
@smogon/calc El paquete @smogon/calc alimenta la UI, proporcionando una interfaz programática para calcular los rangos de daño. Este subpackage contiene un código que se ejecutará tanto en el servidor como en el navegador y se puede usar como un bloque de construcción para UI o aplicaciones alternativas.
$ npm install @smogon/calc Alternativamente, como se detalla a continuación, si está usando @smogon/calc en el navegador y desea una forma conveniente de comenzar, simplemente depende de una versión transpilada y minificada a través de UNPKG:
< script src =" https://unpkg.com/@smogon/calc/dist/data/production.min.js " > </ script >
< script src =" https://unpkg.com/@smogon/calc " > </ script > En este ejemplo, el código @smogon/calc/data también se incluye para cumplir con el requisito de la capa de datos de Calc. Alternativamente, se puede usar una capa de datos más completa, como @pkmn/data , ver a continuación.
@smogon/calc exporta todos los tipos de datos necesarios para realizar un cálculo. Los métodos calculate requieren:
Generation que contiene información sobre qué mecánica de fórmula de daño aplicar y donde se pueden encontrar todos los datos sobre la generación.Pokemon atacante y defensor (nota: solo se requieren atributos relevantes, todo lo demás debe tener valores predeterminados sensatos). El constructor Pokemon también requiere una Generation para proporcionar los datos de los Pokémon para la generación.Move que usa el atacante (que también requiere un argumento Generation para alcanzar los datos de movimiento a la generación particular).Field que contiene información sobre el estado de cada Side . calculate devuelve un objeto Result que contiene métodos para obtener rollos de daño, rangos, descripciones, información de retroceso/drenaje, etc.
import { calculate , Generations , Pokemon , Move } from '@smogon/calc' ;
const gen = Generations . get ( 5 ) ; // alternatively: const gen = 5;
const result = calculate (
gen ,
new Pokemon ( gen , 'Gengar' , {
item : 'Choice Specs' ,
nature : 'Timid' ,
evs : { spa : 252 } ,
boosts : { spa : 1 } ,
} ) ,
new Pokemon ( gen , 'Chansey' , {
item : 'Eviolite' ,
nature : 'Calm' ,
evs : { hp : 252 , spd : 252 } ,
} ) ,
new Move ( gen , 'Focus Blast' )
) ; @smogon/calc viene empaquetado con todos los datos requeridos para el cálculo de daños; de forma predeterminada, lo expone a través de su objeto Generations de @smogon/calc/data . Como atajo, el argumento Generation requerido por calculate , Pokemon , Move puede ser simplemente el número de generación (por ejemplo, 5 ), y manejará que ese objeto Generation de generaciones detrás de escena de la capa de datos con la que se envía.
Los datos en calc/data deben mantenerse sincronizados con Pokémon Showdown. Si hay un problema con los datos de Calc, corrígelo primero en el simulador. En general, probablemente no debería hacer ediciones manuales a ninguno de los archivos de datos, y en el futuro, es probable que se generen programáticamente.
En algunos casos de uso avanzados, es posible que desee usar una capa de datos diferente con la calculadora. El punto de entrada @smogon/calc/adaptable se puede usar con cualquier capa de datos que implementa la interfaz Generations de Calc. Esta interfaz es un subconjunto de la interfaz de Generations de @pkmn/data , por lo que @pkmn/data (que contiene todos los datos competitivamente relevantes de Pokémon Showdown) se puede usar con el punto de entrada adaptable para aplicaciones que desean evitar tener dos conjuntos separados de Los mismos datos enviados a los usuarios.
import { Dex } from '@pkmn/dex' ;
import { Generations } from '@pkmn/data' ;
import { calculate , Pokemon , Move , Field } from '@smogon/calc/adaptable' ;
const gens = new Generations ( Dex ) ;
const gen = gens . get ( 1 ) ;
const result = calculate (
gen ,
new Pokemon ( gen , 'Gengar' ) ,
new Pokemon ( gen , 'Vulpix' ) ,
new Move ( gen , 'Surf' ) ,
new Field ( { defenderSide : { isLightScreen : true } } )
) ; La forma recomendada de usar @smogon/calc en un navegador web es configurar su Bundler (Webpack, Rollup, Parcel, etc.) para minimizarlo y empaquetarlo con el resto de su aplicación. Si no usa un Bundler, una conveniencia production.min.js está incluido en el paquete. Simplemente debe depender de ./node_modules/@smogon/calc/production.min.js en una etiqueta script (que es lo que está haciendo el acceso directo de UNPKG anterior), después de lo cual calc será accesible como global. También debe tener una implementación Generations proporcionada, puede depender de la capa de datos de la calculadora dependiendo de ./node_modules/@smogon/calc/data/production.min.js (o @smogon/calc/data a través de impkg), o Puede usar una capa de datos alternativa como @pkmn/data . Debe cargar su capa de datos antes de cargar el calc:
< script src =" ./node_modules/@smogon/calc/data/production.min.js " > </ script >
< script src =" ./node_modules/@smogon/calc/production.min.js " > </ script > La capa de interfaz de usuario está actualmente escrita en Vanilla JavaScript y HTML. Para ver la interfaz de usuario localmente, primero debe instalar dependencias ejecutando npm install en el nivel superior y sin calc/ . Esto debería crear una carpeta node_modules/ en el directorio raíz y en calc/ ::
$ npm install
$ cd calc && npm install A continuación, ejecute node build desde el directorio raíz de su clon de este repositorio. Esto debería ejecutar npm run compile en el calc/ subdirectorio para compilar el paquete @smogon/calc desde tipescript a javaScript que se puede ejecutar en el navegador, y luego compilar el 'html' plantado 'y copiar todo en el dist/ folder de nivel superior . Para ver la interfaz de usuario, abrir dist/index.html : simplemente haga doble clic en el archivo desde el administrador de archivos de su sistema operativo, la interfaz de usuario debe abrirlo en su navegador predeterminado.
$ node build
$ open dist/index.html # open works on macOS, simply double-clicking the file on Windows/macOS works Si realiza cambios en cualquier cosa en calc/ , debe ejecutar node build desde el nivel superior para compilar los archivos y copiarlos en dist/ nuevamente. Si realiza cambios en HTML o JavaScript en src/ debe ejecutar node build view antes de que los cambios sean visibles en su navegador ( node build también funciona, pero es más lento, ya que compilará calc/ también, lo cual es innecesario Si no realizó ningún cambio en ese directorio).
Antes de abrir una solicitud de extracción, asegúrese de que los pases npm test :
$ npm test Este repositorio también alberga un paquete interno bajo import/ que se utiliza para poblar los datos de Pokémon establece (así como datos sobre opciones de batalla aleatoria) utilizados por la interfaz de usuario. Antes de realizar cambios aquí, debe ejecutar npm install desde el directorio import/ para instalar sus dependencias, ya que no están instaladas de forma predeterminada. TASKS.md contiene más información sobre cómo actualizar programáticamente los conjuntos.
Este proyecto fue creado por Honko y es mantenido principalmente por Austin y Jetou.
Muchos otros contribuyentes han agregado funciones o corrigidas de errores, consulte la lista completa de contribuyentes.
Este paquete se distribuye bajo los términos de la licencia MIT.