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.