mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-05 16:02:20 +02:00
Merge branch 'beta' into battlertag-istransferrable
This commit is contained in:
commit
9cc410c18b
310
index.css
310
index.css
@ -1,16 +1,8 @@
|
|||||||
|
/* Global */
|
||||||
:root {
|
:root {
|
||||||
--color-base: hsl(0, 0%, 55%);
|
--color-base: hsl(0, 0%, 55%);
|
||||||
--color-light: hsl(0, 0%, 90%);
|
--color-light: hsl(0, 0%, 90%);
|
||||||
--color-dark: hsl(0, 0%, 10%);
|
--color-dark: hsl(0, 0%, 10%);
|
||||||
--controls-size: 10vh;
|
|
||||||
--text-shadow-size: 0.65vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (orientation: landscape) {
|
|
||||||
:root {
|
|
||||||
--controls-size: 20vh;
|
|
||||||
--text-shadow-size: 1.3vh;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
html {
|
html {
|
||||||
@ -43,33 +35,181 @@ body {
|
|||||||
transform-origin: top !important;
|
transform-origin: top !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#layout:fullscreen #dpad, #layout:fullscreen {
|
||||||
|
bottom: 6rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
input:-internal-autofill-selected {
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
background-clip: text;
|
||||||
|
}
|
||||||
|
|
||||||
/* Need adjust input font-size */
|
/* Need adjust input font-size */
|
||||||
input {
|
input {
|
||||||
font-size: 3.2rem;
|
font-size: 3.2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
input:-internal-autofill-selected {
|
||||||
|
-webkit-background-clip: text;
|
||||||
|
background-clip: text;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Touch Controls: */
|
||||||
|
|
||||||
|
#touchControls {
|
||||||
|
--text-shadow-size: 0.65vh;
|
||||||
|
--controls-size: 10vh;
|
||||||
|
--touch-control-opacity: 0.6;
|
||||||
|
|
||||||
|
--controls-padding: 1rem;
|
||||||
|
|
||||||
|
--controls-size-with-padding: calc(var(--controls-size) + var(--controls-padding));
|
||||||
|
--controls-size-with-wide-padding: calc(var(--controls-size) *1.2 + var(--controls-padding));
|
||||||
|
--control-group-extra-size: calc(var(--controls-size) * 0.8);
|
||||||
|
--control-group-extra-wide-size: calc(var(--controls-size) * 1.2);
|
||||||
|
|
||||||
|
--control-group-extra-2-offset: calc(var(--controls-size-with-padding) + (var(--controls-size) - var(--control-group-extra-size)) / 2);
|
||||||
|
--control-group-extra-1-offset: calc(var(--controls-padding) + (var(--controls-size) - var(--control-group-extra-size)) / 2);
|
||||||
|
|
||||||
|
--small-control-size: calc(var(--controls-size) / 3);
|
||||||
|
--rect-control-size: calc(var(--controls-size) * 0.74);
|
||||||
|
|
||||||
|
font-family: 'emerald';
|
||||||
|
font-size: var(--controls-size);
|
||||||
|
text-shadow: var(--color-dark) var(--text-shadow-size) var(--text-shadow-size);
|
||||||
|
color: var(--color-light);
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (orientation: landscape) {
|
||||||
|
#touchControls {
|
||||||
|
--controls-size: 20vh;
|
||||||
|
--text-shadow-size: 1.3vh;
|
||||||
|
--small-button-offset: 4vh;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#touchControls:not(.visible) {
|
#touchControls:not(.visible) {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
#dpad, #apad {
|
#touchControls .active {
|
||||||
|
opacity: var(--touch-control-opacity);
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-group {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
bottom: 1rem;
|
display: flex;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
justify-content: space-around;
|
||||||
|
align-items: center;
|
||||||
|
width: var(--controls-size);
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-group-dpad {
|
||||||
|
width: calc(2 * var(--controls-size));
|
||||||
|
height: calc(2 * var(--controls-size));
|
||||||
|
}
|
||||||
|
|
||||||
|
.control-group-extra {
|
||||||
|
width: var(--control-group-extra-size);
|
||||||
|
height: var(--control-group-extra-size);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide buttons on specific UIs */
|
||||||
|
|
||||||
|
/* Show #apadPreviousTab and #apadNextTab only in settings, except in touch configuration panel */
|
||||||
|
#touchControls:not([data-ui-mode^='SETTINGS']) #apadPreviousTab,
|
||||||
|
#touchControls:not([data-ui-mode^='SETTINGS']) #apadNextTab,
|
||||||
|
#touchControls:is(.config-mode) #apadPreviousTab,
|
||||||
|
#touchControls:is(.config-mode) #apadNextTab {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show #apadInfo only in battle */
|
||||||
|
#touchControls:not([data-ui-mode='COMMAND']):not([data-ui-mode='FIGHT']):not([data-ui-mode='BALL']):not([data-ui-mode='TARGET_SELECT']) #apadInfo {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show #apadStats only in battle and shop */
|
||||||
|
#touchControls:not([data-ui-mode='COMMAND']):not([data-ui-mode='FIGHT']):not([data-ui-mode='BALL']):not([data-ui-mode='TARGET_SELECT']):not([data-ui-mode='MODIFIER_SELECT']) #apadStats {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Show cycle buttons only on STARTER_SELECT and on touch configuration panel */
|
||||||
|
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadOpenFilters,
|
||||||
|
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleForm,
|
||||||
|
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleShiny,
|
||||||
|
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleNature,
|
||||||
|
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleAbility,
|
||||||
|
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleGender,
|
||||||
|
#touchControls:not(.config-mode):not([data-ui-mode='STARTER_SELECT']) #apadCycleVariant {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Configuration toolbar */
|
||||||
|
|
||||||
|
#configToolbar {
|
||||||
|
width: 100%;
|
||||||
|
position: fixed;
|
||||||
|
top: 1rem;
|
||||||
|
left: 0;
|
||||||
|
z-index: 9;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#configToolbar .column {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10%;
|
||||||
|
padding: 0 var(--controls-padding);
|
||||||
|
}
|
||||||
|
|
||||||
|
#configToolbar .button-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#configToolbar .info-row {
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-start;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#configToolbar .button {
|
||||||
z-index: 3;
|
z-index: 3;
|
||||||
|
background-color: var(--color-base);
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
text-align: center;
|
||||||
|
border-radius: 10%;
|
||||||
|
height: var(--small-control-size);
|
||||||
|
font-size: var(--small-control-size);
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 2px 8px;
|
||||||
|
text-shadow: var(--color-dark) calc(var(--text-shadow-size) / 3) calc(var(--text-shadow-size) / 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
@media (orientation: portrait) {
|
#configToolbar .button:active {
|
||||||
#dpad, #apad {
|
opacity: var(--touch-control-opacity)
|
||||||
bottom: calc(1rem + env(safe-area-inset-bottom));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#configToolbar .orientation-label {
|
||||||
|
font-size: var(--small-control-size);
|
||||||
|
text-shadow: var(--color-dark) calc(var(--text-shadow-size) / 3) calc(var(--text-shadow-size) / 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* dpad */
|
||||||
#dpad {
|
#dpad {
|
||||||
left: 1rem;
|
z-index: 3;
|
||||||
}
|
opacity: 0.8;
|
||||||
|
|
||||||
#apad {
|
|
||||||
right: 1rem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#dpad svg {
|
#dpad svg {
|
||||||
@ -78,114 +218,84 @@ input {
|
|||||||
fill: var(--color-base);
|
fill: var(--color-base);
|
||||||
}
|
}
|
||||||
|
|
||||||
#dpad svg rect {
|
/* apad buttons */
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
|
|
||||||
#apad > * {
|
.apad-button {
|
||||||
width: var(--controls-size);
|
|
||||||
height: var(--controls-size);
|
|
||||||
}
|
|
||||||
|
|
||||||
#apad .apadBtn {
|
|
||||||
width: var(--controls-size);
|
|
||||||
height: var(--controls-size);
|
|
||||||
background-color: var(--color-base);
|
background-color: var(--color-base);
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
right: 0;
|
||||||
|
bottom: 0;
|
||||||
|
width: var(--controls-size);
|
||||||
|
height: var(--controls-size);
|
||||||
|
opacity: 0.8;
|
||||||
|
border-radius: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#apad .apadLabel {
|
.apad-small {
|
||||||
font-family: 'emerald';
|
width: var(--small-control-size);
|
||||||
font-size: var(--controls-size);
|
height: var(--small-control-size);
|
||||||
text-shadow: var(--color-dark) var(--text-shadow-size) var(--text-shadow-size);
|
}
|
||||||
color: var(--color-light);
|
|
||||||
|
.apad-label {
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
height: 100%;
|
||||||
|
margin-right: -2px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#apad .apadLabelSmall {
|
.apad-small > .apad-label {
|
||||||
font-size: calc(var(--controls-size) / 3);
|
font-size: var(--small-control-size);
|
||||||
text-shadow: var(--color-dark) calc(var(--text-shadow-size) / 3) calc(var(--text-shadow-size) / 3);
|
text-shadow: var(--color-dark) calc(var(--text-shadow-size) / 3) calc(var(--text-shadow-size) / 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
#apad #apadLabelAction, #apad #apadLabelCancel {
|
.apad-rectangle {
|
||||||
margin-left: calc(var(--controls-size) / 3);
|
|
||||||
line-height: 0.9;
|
|
||||||
}
|
|
||||||
|
|
||||||
#apad > :nth-child(2) {
|
|
||||||
position: relative;
|
|
||||||
right: var(--controls-size);
|
|
||||||
}
|
|
||||||
|
|
||||||
#apad .apadRectBtn {
|
|
||||||
position: relative;
|
|
||||||
text-align: center;
|
text-align: center;
|
||||||
padding-right: 10%;
|
width: var(--rect-control-size);
|
||||||
border-radius: 10%;
|
height: var(--small-control-size);
|
||||||
bottom: calc(var(--controls-size) * 0.05);
|
|
||||||
width: calc(var(--controls-size) * 0.6);
|
|
||||||
height: calc(var(--controls-size) * 0.3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#apad .apadSqBtn {
|
.apad-square {
|
||||||
border-radius: 10%;
|
width: var(--small-control-size);
|
||||||
width: calc(var(--controls-size) * 0.3);
|
height: var(--small-control-size);
|
||||||
height: calc(var(--controls-size) * 0.3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#apad .apadBtnContainer {
|
.apad-circle {
|
||||||
position: relative;
|
width: var(--controls-size);
|
||||||
display: flex;
|
height: var(--controls-size);
|
||||||
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#apad .apadRectBtnContainer {
|
/* Defaults:*/
|
||||||
flex-wrap: wrap;
|
|
||||||
margin-top: calc(var(--controls-size) * -0.8);
|
#control-group-dpad {
|
||||||
left: calc(var(--controls-size) * 0.175);
|
left: var(--controls-padding);
|
||||||
height: calc(var(--controls-size) * 0.8);
|
bottom: var(--controls-padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
#apad .apadSqBtnContainer {
|
#control-group-action {
|
||||||
flex-wrap: wrap;
|
right: var(--controls-padding);
|
||||||
justify-content: space-evenly;
|
bottom: var(--controls-size-with-padding);
|
||||||
align-items: center;
|
|
||||||
margin-bottom: calc(var(--controls-size) * -0.8);
|
|
||||||
top: calc(var(--controls-size) * -0.9);
|
|
||||||
width: calc(var(--controls-size) * 0.8);
|
|
||||||
height: calc(var(--controls-size) * 0.8);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#apad .apadRectBtnContainer > #apadMenu {
|
#control-group-cancel {
|
||||||
align-self: flex-end;
|
right: var(--controls-size-with-wide-padding);
|
||||||
|
bottom: var(--controls-padding);
|
||||||
}
|
}
|
||||||
|
|
||||||
#apad .apadRectBtnContainer > .apadSqBtn:not(:first-child) {
|
#control-group-extra-1 {
|
||||||
margin-left: 10%;
|
right: var(--control-group-extra-1-offset);
|
||||||
|
bottom: var(--control-group-extra-1-offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
#touchControls:not([data-ui-mode='STARTER_SELECT']):not([data-ui-mode='SETTINGS']):not([data-ui-mode='SETTINGS_DISPLAY']):not([data-ui-mode='SETTINGS_AUDIO']):not([data-ui-mode='SETTINGS_GAMEPAD']):not([data-ui-mode='SETTINGS_KEYBOARD']) #apad .apadRectBtnContainer > .apadSqBtn:not(.apadBattle),
|
#control-group-extra-2 {
|
||||||
#touchControls:not([data-ui-mode='STARTER_SELECT']):not([data-ui-mode='SETTINGS']):not([data-ui-mode='SETTINGS_DISPLAY']):not([data-ui-mode='SETTINGS_AUDIO']):not([data-ui-mode='SETTINGS_GAMEPAD']):not([data-ui-mode='SETTINGS_KEYBOARD']) #apad .apadSqBtnContainer > .apadSqBtn:not(.apadBattle)
|
width: var(--control-group-extra-wide-size);
|
||||||
{
|
right: var(--control-group-extra-2-offset);
|
||||||
display: none;
|
bottom: var(--control-group-extra-2-offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
#touchControls:not([data-ui-mode='COMMAND']):not([data-ui-mode='FIGHT']):not([data-ui-mode='BALL']):not([data-ui-mode='TARGET_SELECT']):not([data-ui-mode='MODIFIER_SELECT']) #apad .apadBattle {
|
/* Layout */
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
#apad .apadRectBtnContainer + .apadSqBtnContainer {
|
|
||||||
top: calc(var(--controls-size) * -1.9);
|
|
||||||
left: calc(var(--controls-size) * -0.9);
|
|
||||||
}
|
|
||||||
|
|
||||||
#apad .apadBtnContainer .apadLabel {
|
|
||||||
margin-left: calc(var(--controls-size) / 12);
|
|
||||||
line-height: 0.8;
|
|
||||||
}
|
|
||||||
|
|
||||||
#dpad path:not(.active), #apad .apadBtn:not(.active) {
|
|
||||||
opacity: 0.6;
|
|
||||||
}
|
|
||||||
|
|
||||||
#layout:fullscreen #dpad, #layout:fullscreen #apad {
|
#layout:fullscreen #dpad, #layout:fullscreen #apad {
|
||||||
bottom: 6rem;
|
bottom: 6rem;
|
||||||
|
114
index.html
114
index.html
@ -64,54 +64,84 @@
|
|||||||
<body>
|
<body>
|
||||||
<div id="app"></div>
|
<div id="app"></div>
|
||||||
<div id="touchControls">
|
<div id="touchControls">
|
||||||
<div id="dpad" class="unselectable">
|
<div class="left">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72">
|
<div id="control-group-dpad" class="control-group control-group-dpad">
|
||||||
<path id="dpadUp" data-key="UP" d="M48,5.8C48,2.5,45.4,0,42,0H29.9C26.6,0,24,2.4,24,5.8V24h24V5.8z" />
|
<div id="dpad" data-control-key="DPAD">
|
||||||
<path id="dpadRight" data-key="RIGHT" d="M66.2,24H48v24h18.2c3.3,0,5.8-2.7,5.8-6V29.9C72,26.5,69.5,24,66.2,24z" />
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72">
|
||||||
<path id="dpadDown" data-key="DOWN" d="M24,66.3c0,3.3,2.6,5.7,5.9,5.7H42c3.3,0,6-2.4,6-5.7V48H24V66.3z" />
|
<path id="dpadUp" data-key="UP"
|
||||||
<path id="dpadLeft" data-key="LEFT" d="M5.7,24C2.4,24,0,26.5,0,29.9V42c0,3.3,2.3,6,5.7,6H24V24H5.7z" />
|
d="M48,5.8C48,2.5,45.4,0,42,0H29.9C26.6,0,24,2.4,24,5.8V24h24V5.8z" />
|
||||||
<rect id="dpadCenter" x="24" y="24" width="24" height="24" />
|
<path id="dpadRight" data-key="RIGHT"
|
||||||
</svg>
|
d="M66.2,24H48v24h18.2c3.3,0,5.8-2.7,5.8-6V29.9C72,26.5,69.5,24,66.2,24z" />
|
||||||
|
<path id="dpadDown" data-key="DOWN"
|
||||||
|
d="M24,66.3c0,3.3,2.6,5.7,5.9,5.7H42c3.3,0,6-2.4,6-5.7V48H24V66.3z" />
|
||||||
|
<path id="dpadLeft" data-key="LEFT"
|
||||||
|
d="M5.7,24C2.4,24,0,26.5,0,29.9V42c0,3.3,2.3,6,5.7,6H24V24H5.7z" />
|
||||||
|
<rect id="dpadCenter" x="24" y="24" width="24" height="24" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="apad" class="unselectable">
|
<div class="right">
|
||||||
<div id="apadAction" class="apadCircBtn apadBtn" data-key="ACTION">
|
<div id="control-group-action" class="control-group">
|
||||||
<text id="apadLabelAction" class="apadLabel">A</text>
|
<div id="apadAction" class="apad-button apad-circle" data-key="ACTION">
|
||||||
</div>
|
<span class="apad-label">A</span>
|
||||||
<div id="apadCancel" class="apadCircBtn apadBtn" data-key="CANCEL">
|
|
||||||
<text id="apadLabelCancel" class="apadLabel">B</text>
|
|
||||||
</div>
|
|
||||||
<div class="apadBtnContainer apadRectBtnContainer">
|
|
||||||
<div id="apadCycleShiny" class="apadSqBtn apadBtn" data-key="CYCLE_SHINY">
|
|
||||||
<text class="apadLabel apadLabelSmall">R</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadCycleVariant" class="apadSqBtn apadBtn" data-key="V">
|
|
||||||
<text class="apadLabel apadLabelSmall">V</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadStats" class="apadRectBtn apadBtn apadBattle" data-key="STATS">
|
|
||||||
<text class="apadLabel apadLabelSmall">C</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadMenu" class="apadRectBtn apadBtn" data-key="MENU">
|
|
||||||
<text class="apadLabel apadLabelSmall">Menu</text>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="apadBtnContainer apadSqBtnContainer">
|
|
||||||
<div id="apadCycleForm" class="apadSqBtn apadBtn" data-key="CYCLE_FORM">
|
<div id="control-group-cancel" class="control-group">
|
||||||
<text class="apadLabel apadLabelSmall">F</text>
|
<div id="apadCancel" class="apad-button apad-circle" data-key="CANCEL">
|
||||||
</div>
|
<span class="apad-label">B</span>
|
||||||
<div id="apadCycleGender" class="apadSqBtn apadBtn" data-key="CYCLE_GENDER">
|
|
||||||
<text class="apadLabel apadLabelSmall">G</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadCycleAbility" class="apadSqBtn apadBtn" data-key="CYCLE_ABILITY">
|
|
||||||
<text class="apadLabel apadLabelSmall">E</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadCycleNature" class="apadSqBtn apadBtn" data-key="CYCLE_NATURE">
|
|
||||||
<text class="apadLabel apadLabelSmall">N</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadInfo" class="apadRectBtn apadBtn apadBattle" data-key="V">
|
|
||||||
<text class="apadLabel apadLabelSmall">V</text>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="control-group-extra-1" class="control-group control-group-extra">
|
||||||
|
<!-- buttons to navigate settings tabs -->
|
||||||
|
<div id="apadPreviousTab" class="apad-button apad-square apad-small" data-key="CYCLE_FORM">
|
||||||
|
<span class="apad-label">F</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadNextTab" class="apad-button apad-square apad-small" data-key="CYCLE_SHINY">
|
||||||
|
<span class="apad-label">R</span>
|
||||||
|
</div>
|
||||||
|
<!-- buttons to open filter menu in starter select -->
|
||||||
|
<div id="apadOpenFilters" class="apad-button apad-rectangle apad-small" data-key="STATS">
|
||||||
|
<span class="apad-label">C</span>
|
||||||
|
</div>
|
||||||
|
<!-- main menu button -->
|
||||||
|
<div id="apadMenu" class="apad-button apad-rectangle apad-small" data-key="MENU">
|
||||||
|
<span class="apad-label">Menu</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="control-group-extra-2" class="control-group control-group-extra">
|
||||||
|
<!-- buttons to cycle through pokemon characteristics in starter select -->
|
||||||
|
<div id="apadCycleForm" class="apad-button apad-square apad-small" data-key="CYCLE_FORM">
|
||||||
|
<span class="apad-label">F</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadCycleGender" class="apad-button apad-square apad-small" data-key="CYCLE_GENDER">
|
||||||
|
<span class="apad-label">G</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadCycleShiny" class="apad-button apad-square apad-small" data-key="CYCLE_SHINY">
|
||||||
|
<span class="apad-label">R</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadCycleAbility" class="apad-button apad-square apad-small" data-key="CYCLE_ABILITY">
|
||||||
|
<span class="apad-label">E</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadCycleNature" class="apad-button apad-square apad-small" data-key="CYCLE_NATURE">
|
||||||
|
<span class="apad-label">N</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadCycleVariant" class="apad-button apad-square apad-small" data-key="V">
|
||||||
|
<span class="apad-label">V</span>
|
||||||
|
</div>
|
||||||
|
<!-- buttons to display battle-specific information -->
|
||||||
|
<div id="apadInfo" class="apad-button apad-rectangle apad-small" data-key="V">
|
||||||
|
<span class="apad-label">V</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadStats" class="apad-button apad-rectangle apad-small" data-key="STATS">
|
||||||
|
<span class="apad-label">C</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="tnc-links">
|
<div id="tnc-links">
|
||||||
|
@ -4408,7 +4408,7 @@ export function initAbilities() {
|
|||||||
.attr(StatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC)
|
.attr(StatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC)
|
||||||
.ignorable(),
|
.ignorable(),
|
||||||
new Ability(Abilities.FLASH_FIRE, 3)
|
new Ability(Abilities.FLASH_FIRE, 3)
|
||||||
.attr(TypeImmunityAddBattlerTagAbAttr, Type.FIRE, BattlerTagType.FIRE_BOOST, 1, (pokemon: Pokemon) => !pokemon.status || pokemon.status.effect !== StatusEffect.FREEZE)
|
.attr(TypeImmunityAddBattlerTagAbAttr, Type.FIRE, BattlerTagType.FIRE_BOOST, 1)
|
||||||
.ignorable(),
|
.ignorable(),
|
||||||
new Ability(Abilities.SHIELD_DUST, 3)
|
new Ability(Abilities.SHIELD_DUST, 3)
|
||||||
.attr(IgnoreMoveEffectsAbAttr)
|
.attr(IgnoreMoveEffectsAbAttr)
|
||||||
|
@ -112,7 +112,7 @@ export class RechargingTag extends BattlerTag {
|
|||||||
/** Cancels the source's move this turn and queues a "__ must recharge!" message */
|
/** Cancels the source's move this turn and queues a "__ must recharge!" message */
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
if (lapseType === BattlerTagLapseType.PRE_MOVE) {
|
if (lapseType === BattlerTagLapseType.PRE_MOVE) {
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsRechargingLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:rechargingLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
||||||
pokemon.getMoveQueue().shift();
|
pokemon.getMoveQueue().shift();
|
||||||
}
|
}
|
||||||
@ -179,7 +179,7 @@ export class TrappedTag extends BattlerTag {
|
|||||||
onRemove(pokemon: Pokemon): void {
|
onRemove(pokemon: Pokemon): void {
|
||||||
super.onRemove(pokemon);
|
super.onRemove(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsTrappedOnRemove", {
|
pokemon.scene.queueMessage(i18next.t("battlerTags:trappedOnRemove", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
moveName: this.getMoveName()
|
moveName: this.getMoveName()
|
||||||
}));
|
}));
|
||||||
@ -194,7 +194,7 @@ export class TrappedTag extends BattlerTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsTrappedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) });
|
return i18next.t("battlerTags:trappedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -225,7 +225,7 @@ export class FlinchedTag extends BattlerTag {
|
|||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
if (lapseType === BattlerTagLapseType.PRE_MOVE) {
|
if (lapseType === BattlerTagLapseType.PRE_MOVE) {
|
||||||
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsFlinchedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:flinchedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
return super.lapse(pokemon, lapseType);
|
return super.lapse(pokemon, lapseType);
|
||||||
@ -274,26 +274,26 @@ export class ConfusedTag extends BattlerTag {
|
|||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION));
|
pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION));
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsConfusedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:confusedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
onRemove(pokemon: Pokemon): void {
|
onRemove(pokemon: Pokemon): void {
|
||||||
super.onRemove(pokemon);
|
super.onRemove(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsConfusedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:confusedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
onOverlap(pokemon: Pokemon): void {
|
onOverlap(pokemon: Pokemon): void {
|
||||||
super.onOverlap(pokemon);
|
super.onOverlap(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsConfusedOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:confusedOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
const ret = lapseType !== BattlerTagLapseType.CUSTOM && super.lapse(pokemon, lapseType);
|
const ret = lapseType !== BattlerTagLapseType.CUSTOM && super.lapse(pokemon, lapseType);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsConfusedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:confusedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION));
|
pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CONFUSION));
|
||||||
|
|
||||||
// 1/3 chance of hitting self with a 40 base power move
|
// 1/3 chance of hitting self with a 40 base power move
|
||||||
@ -301,7 +301,7 @@ export class ConfusedTag extends BattlerTag {
|
|||||||
const atk = pokemon.getBattleStat(Stat.ATK);
|
const atk = pokemon.getBattleStat(Stat.ATK);
|
||||||
const def = pokemon.getBattleStat(Stat.DEF);
|
const def = pokemon.getBattleStat(Stat.DEF);
|
||||||
const damage = Math.ceil(((((2 * pokemon.level / 5 + 2) * 40 * atk / def) / 50) + 2) * (pokemon.randSeedInt(15, 85) / 100));
|
const damage = Math.ceil(((((2 * pokemon.level / 5 + 2) * 40 * atk / def) / 50) + 2) * (pokemon.randSeedInt(15, 85) / 100));
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsConfusedLapseHurtItself"));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:confusedLapseHurtItself"));
|
||||||
pokemon.damageAndUpdate(damage);
|
pokemon.damageAndUpdate(damage);
|
||||||
pokemon.battleData.hitCount++;
|
pokemon.battleData.hitCount++;
|
||||||
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
||||||
@ -349,12 +349,12 @@ export class DestinyBondTag extends BattlerTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (pokemon.isBossImmune()) {
|
if (pokemon.isBossImmune()) {
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsDestinyBondLapseIsBoss", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:destinyBondLapseIsBoss", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
pokemon.scene.queueMessage(
|
pokemon.scene.queueMessage(
|
||||||
i18next.t("battle:battlerTagsDestinyBondLapse", {
|
i18next.t("battlerTags:destinyBondLapse", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(source),
|
pokemonNameWithAffix: getPokemonNameWithAffix(source),
|
||||||
pokemonNameWithAffix2: getPokemonNameWithAffix(pokemon)
|
pokemonNameWithAffix2: getPokemonNameWithAffix(pokemon)
|
||||||
})
|
})
|
||||||
@ -389,7 +389,7 @@ export class InfatuatedTag extends BattlerTag {
|
|||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(
|
pokemon.scene.queueMessage(
|
||||||
i18next.t("battle:battlerTagsInfatuatedOnAdd", {
|
i18next.t("battlerTags:infatuatedOnAdd", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined) // TODO: is that bang correct?
|
sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined) // TODO: is that bang correct?
|
||||||
})
|
})
|
||||||
@ -399,7 +399,7 @@ export class InfatuatedTag extends BattlerTag {
|
|||||||
onOverlap(pokemon: Pokemon): void {
|
onOverlap(pokemon: Pokemon): void {
|
||||||
super.onOverlap(pokemon);
|
super.onOverlap(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsInfatuatedOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:infatuatedOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
@ -407,7 +407,7 @@ export class InfatuatedTag extends BattlerTag {
|
|||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pokemon.scene.queueMessage(
|
pokemon.scene.queueMessage(
|
||||||
i18next.t("battle:battlerTagsInfatuatedLapse", {
|
i18next.t("battlerTags:infatuatedLapse", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined) // TODO: is that bang correct?
|
sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined) // TODO: is that bang correct?
|
||||||
})
|
})
|
||||||
@ -415,7 +415,7 @@ export class InfatuatedTag extends BattlerTag {
|
|||||||
pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.ATTRACT));
|
pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.ATTRACT));
|
||||||
|
|
||||||
if (pokemon.randSeedInt(2)) {
|
if (pokemon.randSeedInt(2)) {
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsInfatuatedLapseImmobilize", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:infatuatedLapseImmobilize", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -426,7 +426,7 @@ export class InfatuatedTag extends BattlerTag {
|
|||||||
onRemove(pokemon: Pokemon): void {
|
onRemove(pokemon: Pokemon): void {
|
||||||
super.onRemove(pokemon);
|
super.onRemove(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsInfatuatedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:infatuatedOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
isSourceLinked(): boolean {
|
isSourceLinked(): boolean {
|
||||||
@ -461,7 +461,7 @@ export class SeedTag extends BattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsSeededOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:seededOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
this.sourceIndex = pokemon.scene.getPokemonById(this.sourceId!)!.getBattlerIndex(); // TODO: are those bangs correct?
|
this.sourceIndex = pokemon.scene.getPokemonById(this.sourceId!)!.getBattlerIndex(); // TODO: are those bangs correct?
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -481,7 +481,7 @@ export class SeedTag extends BattlerTag {
|
|||||||
const reverseDrain = pokemon.hasAbilityWithAttr(ReverseDrainAbAttr, false);
|
const reverseDrain = pokemon.hasAbilityWithAttr(ReverseDrainAbAttr, false);
|
||||||
pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, source.getBattlerIndex(),
|
pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, source.getBattlerIndex(),
|
||||||
!reverseDrain ? damage : damage * -1,
|
!reverseDrain ? damage : damage * -1,
|
||||||
!reverseDrain ? i18next.t("battle:battlerTagsSeededLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }) : i18next.t("battle:battlerTagsSeededLapseShed", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }),
|
!reverseDrain ? i18next.t("battlerTags:seededLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }) : i18next.t("battlerTags:seededLapseShed", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }),
|
||||||
false, true));
|
false, true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -503,20 +503,20 @@ export class NightmareTag extends BattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsNightmareOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:nightmareOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
onOverlap(pokemon: Pokemon): void {
|
onOverlap(pokemon: Pokemon): void {
|
||||||
super.onOverlap(pokemon);
|
super.onOverlap(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsNightmareOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:nightmareOnOverlap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType);
|
const ret = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType);
|
||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsNightmareLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:nightmareLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE)); // TODO: Update animation type
|
pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.CURSE)); // TODO: Update animation type
|
||||||
|
|
||||||
const cancelled = new Utils.BooleanHolder(false);
|
const cancelled = new Utils.BooleanHolder(false);
|
||||||
@ -604,7 +604,7 @@ export class EncoreTag extends BattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onRemove(pokemon);
|
super.onRemove(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsEncoreOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:encoreOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
|
|
||||||
const movePhase = pokemon.scene.findPhase(m => m instanceof MovePhase && m.pokemon === pokemon);
|
const movePhase = pokemon.scene.findPhase(m => m instanceof MovePhase && m.pokemon === pokemon);
|
||||||
if (movePhase) {
|
if (movePhase) {
|
||||||
@ -620,7 +620,7 @@ export class EncoreTag extends BattlerTag {
|
|||||||
onRemove(pokemon: Pokemon): void {
|
onRemove(pokemon: Pokemon): void {
|
||||||
super.onRemove(pokemon);
|
super.onRemove(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsEncoreOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:encoreOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -631,7 +631,7 @@ export class HelpingHandTag extends BattlerTag {
|
|||||||
|
|
||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
pokemon.scene.queueMessage(
|
pokemon.scene.queueMessage(
|
||||||
i18next.t("battle:battlerTagsHelpingHandOnAdd", {
|
i18next.t("battlerTags:helpingHandOnAdd", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
||||||
pokemonName: getPokemonNameWithAffix(pokemon)
|
pokemonName: getPokemonNameWithAffix(pokemon)
|
||||||
})
|
})
|
||||||
@ -668,7 +668,7 @@ export class IngrainTag extends TrappedTag {
|
|||||||
pokemon.scene,
|
pokemon.scene,
|
||||||
pokemon.getBattlerIndex(),
|
pokemon.getBattlerIndex(),
|
||||||
Math.floor(pokemon.getMaxHp() / 16),
|
Math.floor(pokemon.getMaxHp() / 16),
|
||||||
i18next.t("battle:battlerTagsIngrainLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }),
|
i18next.t("battlerTags:ingrainLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }),
|
||||||
true
|
true
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
@ -678,7 +678,7 @@ export class IngrainTag extends TrappedTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsIngrainOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) });
|
return i18next.t("battlerTags:ingrainOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) });
|
||||||
}
|
}
|
||||||
|
|
||||||
getDescriptor(): string {
|
getDescriptor(): string {
|
||||||
@ -719,7 +719,7 @@ export class AquaRingTag extends BattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsAquaRingOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:aquaRingOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
@ -731,7 +731,7 @@ export class AquaRingTag extends BattlerTag {
|
|||||||
pokemon.scene,
|
pokemon.scene,
|
||||||
pokemon.getBattlerIndex(),
|
pokemon.getBattlerIndex(),
|
||||||
Math.floor(pokemon.getMaxHp() / 16),
|
Math.floor(pokemon.getMaxHp() / 16),
|
||||||
i18next.t("battle:battlerTagsAquaRingLapse", {
|
i18next.t("battlerTags:aquaRingLapse", {
|
||||||
moveName: this.getMoveName(),
|
moveName: this.getMoveName(),
|
||||||
pokemonName: getPokemonNameWithAffix(pokemon)
|
pokemonName: getPokemonNameWithAffix(pokemon)
|
||||||
}),
|
}),
|
||||||
@ -781,7 +781,7 @@ export class DrowsyTag extends BattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsDrowsyOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:drowsyOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
@ -825,7 +825,7 @@ export abstract class DamagingTrapTag extends TrappedTag {
|
|||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pokemon.scene.queueMessage(
|
pokemon.scene.queueMessage(
|
||||||
i18next.t("battle:battlerTagsDamagingTrapLapse", {
|
i18next.t("battlerTags:damagingTrapLapse", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
moveName: this.getMoveName()
|
moveName: this.getMoveName()
|
||||||
})
|
})
|
||||||
@ -850,7 +850,7 @@ export class BindTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsBindOnTrap", {
|
return i18next.t("battlerTags:bindOnTrap", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
||||||
moveName: this.getMoveName()
|
moveName: this.getMoveName()
|
||||||
@ -864,7 +864,7 @@ export class WrapTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsWrapOnTrap", {
|
return i18next.t("battlerTags:wrapOnTrap", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
||||||
});
|
});
|
||||||
@ -877,7 +877,7 @@ export abstract class VortexTrapTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsVortexOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) });
|
return i18next.t("battlerTags:vortexOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -899,7 +899,7 @@ export class ClampTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsClampOnTrap", {
|
return i18next.t("battlerTags:clampOnTrap", {
|
||||||
sourcePokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
sourcePokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
||||||
pokemonName: getPokemonNameWithAffix(pokemon),
|
pokemonName: getPokemonNameWithAffix(pokemon),
|
||||||
});
|
});
|
||||||
@ -912,7 +912,7 @@ export class SandTombTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsSandTombOnTrap", {
|
return i18next.t("battlerTags:sandTombOnTrap", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
moveName: this.getMoveName()
|
moveName: this.getMoveName()
|
||||||
});
|
});
|
||||||
@ -925,7 +925,7 @@ export class MagmaStormTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsMagmaStormOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) });
|
return i18next.t("battlerTags:magmaStormOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -935,7 +935,7 @@ export class SnapTrapTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsSnapTrapOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) });
|
return i18next.t("battlerTags:snapTrapOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -945,7 +945,7 @@ export class ThunderCageTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsThunderCageOnTrap", {
|
return i18next.t("battlerTags:thunderCageOnTrap", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
sourcePokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
sourcePokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
||||||
});
|
});
|
||||||
@ -958,7 +958,7 @@ export class InfestationTag extends DamagingTrapTag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTrapMessage(pokemon: Pokemon): string {
|
getTrapMessage(pokemon: Pokemon): string {
|
||||||
return i18next.t("battle:battlerTagsInfestationOnTrap", {
|
return i18next.t("battlerTags:infestationOnTrap", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
sourcePokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
sourcePokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId!) ?? undefined), // TODO: is that bang correct?
|
||||||
});
|
});
|
||||||
@ -974,13 +974,13 @@ export class ProtectedTag extends BattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsProtectedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:protectedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
if (lapseType === BattlerTagLapseType.CUSTOM) {
|
if (lapseType === BattlerTagLapseType.CUSTOM) {
|
||||||
new CommonBattleAnim(CommonAnim.PROTECT, pokemon).play(pokemon.scene);
|
new CommonBattleAnim(CommonAnim.PROTECT, pokemon).play(pokemon.scene);
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsProtectedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:protectedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
|
|
||||||
// Stop multi-hit moves early
|
// Stop multi-hit moves early
|
||||||
const effectPhase = pokemon.scene.getCurrentPhase();
|
const effectPhase = pokemon.scene.getCurrentPhase();
|
||||||
@ -1113,12 +1113,12 @@ export class EnduringTag extends BattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsEnduringOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:enduringOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
if (lapseType === BattlerTagLapseType.CUSTOM) {
|
if (lapseType === BattlerTagLapseType.CUSTOM) {
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsEnduringLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:enduringLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1133,7 +1133,7 @@ export class SturdyTag extends BattlerTag {
|
|||||||
|
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
if (lapseType === BattlerTagLapseType.CUSTOM) {
|
if (lapseType === BattlerTagLapseType.CUSTOM) {
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsSturdyLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:sturdyLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1155,7 +1155,7 @@ export class PerishSongTag extends BattlerTag {
|
|||||||
|
|
||||||
if (ret) {
|
if (ret) {
|
||||||
pokemon.scene.queueMessage(
|
pokemon.scene.queueMessage(
|
||||||
i18next.t("battle:battlerTagsPerishSongLapse", {
|
i18next.t("battlerTags:perishSongLapse", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
turnCount: this.turnCount
|
turnCount: this.turnCount
|
||||||
})
|
})
|
||||||
@ -1191,7 +1191,7 @@ export class CenterOfAttentionTag extends BattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsCenterOfAttentionOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:centerOfAttentionOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1230,7 +1230,7 @@ export class TruantTag extends AbilityBattlerTag {
|
|||||||
if (lastMove && lastMove.move !== Moves.NONE) {
|
if (lastMove && lastMove.move !== Moves.NONE) {
|
||||||
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
(pokemon.scene.getCurrentPhase() as MovePhase).cancel();
|
||||||
pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.id, passive));
|
pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.id, passive));
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsTruantLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:truantLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -1245,7 +1245,7 @@ export class SlowStartTag extends AbilityBattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsSlowStartOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, false, null, true);
|
pokemon.scene.queueMessage(i18next.t("battlerTags:slowStartOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, false, null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
@ -1259,7 +1259,7 @@ export class SlowStartTag extends AbilityBattlerTag {
|
|||||||
onRemove(pokemon: Pokemon): void {
|
onRemove(pokemon: Pokemon): void {
|
||||||
super.onRemove(pokemon);
|
super.onRemove(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsSlowStartOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, false, null);
|
pokemon.scene.queueMessage(i18next.t("battlerTags:slowStartOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), null, false, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1306,13 +1306,13 @@ export class HighestStatBoostTag extends AbilityBattlerTag {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsHighestStatBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), statName: getStatName(highestStat) }), null, false, null, true);
|
pokemon.scene.queueMessage(i18next.t("battlerTags:highestStatBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), statName: getStatName(highestStat) }), null, false, null, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
onRemove(pokemon: Pokemon): void {
|
onRemove(pokemon: Pokemon): void {
|
||||||
super.onRemove(pokemon);
|
super.onRemove(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsHighestStatBoostOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: allAbilities[this.ability].name }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:highestStatBoostOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: allAbilities[this.ability].name }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1399,13 +1399,13 @@ export class MagnetRisenTag extends TypeImmuneTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsMagnetRisenOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:magnetRisenOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
onRemove(pokemon: Pokemon): void {
|
onRemove(pokemon: Pokemon): void {
|
||||||
super.onRemove(pokemon);
|
super.onRemove(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsMagnetRisenOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:magnetRisenOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1446,7 +1446,7 @@ export class CritBoostTag extends BattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsCritBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:critBoostOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
|
|
||||||
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean {
|
||||||
@ -1456,7 +1456,7 @@ export class CritBoostTag extends BattlerTag {
|
|||||||
onRemove(pokemon: Pokemon): void {
|
onRemove(pokemon: Pokemon): void {
|
||||||
super.onRemove(pokemon);
|
super.onRemove(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsCritBoostOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:critBoostOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1479,7 +1479,7 @@ export class SaltCuredTag extends BattlerTag {
|
|||||||
onAdd(pokemon: Pokemon): void {
|
onAdd(pokemon: Pokemon): void {
|
||||||
super.onAdd(pokemon);
|
super.onAdd(pokemon);
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsSaltCuredOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:saltCuredOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
this.sourceIndex = pokemon.scene.getPokemonById(this.sourceId!)!.getBattlerIndex(); // TODO: are those bangs correct?
|
this.sourceIndex = pokemon.scene.getPokemonById(this.sourceId!)!.getBattlerIndex(); // TODO: are those bangs correct?
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1497,7 +1497,7 @@ export class SaltCuredTag extends BattlerTag {
|
|||||||
pokemon.damageAndUpdate(Math.max(Math.floor(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), 1));
|
pokemon.damageAndUpdate(Math.max(Math.floor(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), 1));
|
||||||
|
|
||||||
pokemon.scene.queueMessage(
|
pokemon.scene.queueMessage(
|
||||||
i18next.t("battle:battlerTagsSaltCuredLapse", {
|
i18next.t("battlerTags:saltCuredLapse", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
moveName: this.getMoveName()
|
moveName: this.getMoveName()
|
||||||
})
|
})
|
||||||
@ -1541,7 +1541,7 @@ export class CursedTag extends BattlerTag {
|
|||||||
|
|
||||||
if (!cancelled.value) {
|
if (!cancelled.value) {
|
||||||
pokemon.damageAndUpdate(Math.max(Math.floor(pokemon.getMaxHp() / 4), 1));
|
pokemon.damageAndUpdate(Math.max(Math.floor(pokemon.getMaxHp() / 4), 1));
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsCursedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
pokemon.scene.queueMessage(i18next.t("battlerTags:cursedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1665,7 +1665,7 @@ export class StockpilingTag extends BattlerTag {
|
|||||||
if (this.stockpiledCount < 3) {
|
if (this.stockpiledCount < 3) {
|
||||||
this.stockpiledCount++;
|
this.stockpiledCount++;
|
||||||
|
|
||||||
pokemon.scene.queueMessage(i18next.t("battle:battlerTagsStockpilingOnAdd", {
|
pokemon.scene.queueMessage(i18next.t("battlerTags:stockpilingOnAdd", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
pokemonNameWithAffix: getPokemonNameWithAffix(pokemon),
|
||||||
stockpiledCount: this.stockpiledCount
|
stockpiledCount: this.stockpiledCount
|
||||||
}));
|
}));
|
||||||
|
@ -630,8 +630,8 @@ export class FreshStartChallenge extends Challenge {
|
|||||||
}
|
}
|
||||||
|
|
||||||
applyStarterCost(species: Species, cost: Utils.NumberHolder): boolean {
|
applyStarterCost(species: Species, cost: Utils.NumberHolder): boolean {
|
||||||
if (defaultStarterSpecies.includes(species) && cost.value !== 3) {
|
if (defaultStarterSpecies.includes(species)) {
|
||||||
cost.value = 3;
|
cost.value = speciesStarters[species];
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -4414,7 +4414,7 @@ export class CurseAttr extends MoveEffectAttr {
|
|||||||
const curseRecoilDamage = Math.max(1, Math.floor(user.getMaxHp() / 2));
|
const curseRecoilDamage = Math.max(1, Math.floor(user.getMaxHp() / 2));
|
||||||
user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true);
|
user.damageAndUpdate(curseRecoilDamage, HitResult.OTHER, false, true, true);
|
||||||
user.scene.queueMessage(
|
user.scene.queueMessage(
|
||||||
i18next.t("battle:battlerTagsCursedOnAdd", {
|
i18next.t("battle:cursedOnAdd", {
|
||||||
pokemonNameWithAffix: getPokemonNameWithAffix(user),
|
pokemonNameWithAffix: getPokemonNameWithAffix(user),
|
||||||
pokemonName: getPokemonNameWithAffix(target)
|
pokemonName: getPokemonNameWithAffix(target)
|
||||||
})
|
})
|
||||||
|
@ -916,13 +916,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
* excluding any moves already known.
|
* excluding any moves already known.
|
||||||
*
|
*
|
||||||
* Available egg moves are only included if the {@linkcode Pokemon} was
|
* Available egg moves are only included if the {@linkcode Pokemon} was
|
||||||
* in the starting party of the run.
|
* in the starting party of the run and if Fresh Start is not active.
|
||||||
* @returns an array of {@linkcode Moves}, the length of which is determined
|
* @returns an array of {@linkcode Moves}, the length of which is determined
|
||||||
* by how many learnable moves there are for the {@linkcode Pokemon}.
|
* by how many learnable moves there are for the {@linkcode Pokemon}.
|
||||||
*/
|
*/
|
||||||
getLearnableLevelMoves(): Moves[] {
|
getLearnableLevelMoves(): Moves[] {
|
||||||
let levelMoves = this.getLevelMoves(1, true).map(lm => lm[1]);
|
let levelMoves = this.getLevelMoves(1, true).map(lm => lm[1]);
|
||||||
if (this.metBiome === -1) {
|
if (this.metBiome === -1 && !this.scene.gameMode.isFreshStartChallenge()) {
|
||||||
levelMoves = this.getUnlockedEggMoves().concat(levelMoves);
|
levelMoves = this.getUnlockedEggMoves().concat(levelMoves);
|
||||||
}
|
}
|
||||||
return levelMoves.filter(lm => !this.moveset.some(m => m?.moveId === lm));
|
return levelMoves.filter(lm => !this.moveset.some(m => m?.moveId === lm));
|
||||||
@ -1082,8 +1082,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Final boss does not have passive
|
// Classic Final boss and Endless Minor/Major bosses do not have passive
|
||||||
if (this.scene.currentBattle?.battleSpec === BattleSpec.FINAL_BOSS && this instanceof EnemyPokemon) {
|
const { currentBattle, gameMode } = this.scene;
|
||||||
|
const waveIndex = currentBattle?.waveIndex;
|
||||||
|
if (this instanceof EnemyPokemon &&
|
||||||
|
(currentBattle?.battleSpec === BattleSpec.FINAL_BOSS ||
|
||||||
|
gameMode.isEndlessMinorBoss(waveIndex) ||
|
||||||
|
gameMode.isEndlessMajorBoss(waveIndex))) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2435,8 +2440,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
for (const tag of source.summonData.tags) {
|
for (const tag of source.summonData.tags) {
|
||||||
|
|
||||||
// bypass yawn, and infatuation as those can not be passed via Baton Pass
|
// bypass those can not be passed via Baton Pass
|
||||||
if (tag.sourceMove === Moves.YAWN || tag.tagType === BattlerTagType.INFATUATED) {
|
const excludeTagTypes = new Set([BattlerTagType.DROWSY, BattlerTagType.INFATUATED, BattlerTagType.FIRE_BOOST]);
|
||||||
|
|
||||||
|
if (excludeTagTypes.has(tag.tagType)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import Overrides from "#app/overrides";
|
|||||||
import * as Utils from "./utils";
|
import * as Utils from "./utils";
|
||||||
import { Biome } from "#enums/biome";
|
import { Biome } from "#enums/biome";
|
||||||
import { Species } from "#enums/species";
|
import { Species } from "#enums/species";
|
||||||
|
import { Challenges } from "./enums/challenges";
|
||||||
|
|
||||||
export enum GameModes {
|
export enum GameModes {
|
||||||
CLASSIC,
|
CLASSIC,
|
||||||
@ -55,6 +56,23 @@ export class GameMode implements GameModeConfig {
|
|||||||
this.battleConfig = battleConfig || {};
|
this.battleConfig = battleConfig || {};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to see if a GameMode has a specific challenge type
|
||||||
|
* @param challenge the Challenges it looks for
|
||||||
|
* @returns true if the game mode has that challenge
|
||||||
|
*/
|
||||||
|
hasChallenge(challenge: Challenges): boolean {
|
||||||
|
return this.challenges.some(c => c.id === challenge);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to see if the game mode is using fresh start
|
||||||
|
* @returns true if a fresh start challenge is being applied
|
||||||
|
*/
|
||||||
|
isFreshStartChallenge(): boolean {
|
||||||
|
return this.hasChallenge(Challenges.FRESH_START);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @returns either:
|
* @returns either:
|
||||||
* - override from overrides.ts
|
* - override from overrides.ts
|
||||||
|
@ -21,6 +21,7 @@ import {SettingKeyboard} from "#app/system/settings/settings-keyboard";
|
|||||||
import TouchControl from "#app/touch-controls";
|
import TouchControl from "#app/touch-controls";
|
||||||
import { Button } from "#enums/buttons";
|
import { Button } from "#enums/buttons";
|
||||||
import { Device } from "#enums/devices";
|
import { Device } from "#enums/devices";
|
||||||
|
import MoveTouchControlsHandler from "./ui/settings/move-touch-controls-handler";
|
||||||
|
|
||||||
export interface DeviceMapping {
|
export interface DeviceMapping {
|
||||||
[key: string]: number;
|
[key: string]: number;
|
||||||
@ -105,6 +106,7 @@ export class InputsController {
|
|||||||
public lastSource: string = "keyboard";
|
public lastSource: string = "keyboard";
|
||||||
private inputInterval: NodeJS.Timeout[] = new Array();
|
private inputInterval: NodeJS.Timeout[] = new Array();
|
||||||
private touchControls: TouchControl;
|
private touchControls: TouchControl;
|
||||||
|
public moveTouchControlsHandler: MoveTouchControlsHandler;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes a new instance of the game control system, setting up initial state and configurations.
|
* Initializes a new instance of the game control system, setting up initial state and configurations.
|
||||||
@ -182,6 +184,7 @@ export class InputsController {
|
|||||||
this.scene.input.keyboard?.on("keyup", this.keyboardKeyUp, this);
|
this.scene.input.keyboard?.on("keyup", this.keyboardKeyUp, this);
|
||||||
}
|
}
|
||||||
this.touchControls = new TouchControl(this.scene);
|
this.touchControls = new TouchControl(this.scene);
|
||||||
|
this.moveTouchControlsHandler = new MoveTouchControlsHandler(this.touchControls);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -95,65 +95,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"congratulations": "Congratulations!",
|
"congratulations": "Congratulations!",
|
||||||
"beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!",
|
"beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!",
|
||||||
"ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!",
|
"ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!",
|
||||||
"battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} must\nrecharge!",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} can no\nlonger escape!",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} was freed\nfrom {{moveName}}!",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}} flinched!",
|
|
||||||
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}} became\nconfused!",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}} snapped\nout of confusion!",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}} is\nalready confused!",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}} is\nconfused!",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "It hurt itself in its\nconfusion!",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}} is unaffected\nby the effects of Destiny Bond.",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}} took\n{{pokemonNameWithAffix2}} down with it!",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}} fell in love\nwith {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}} is\nalready in love!",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}} is in love\nwith {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}} is\nimmobilized by love!",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}} got over\nits infatuation.",
|
|
||||||
"battlerTagsSeededOnAdd": "{{pokemonNameWithAffix}} was seeded!",
|
|
||||||
"battlerTagsSeededLapse": "{{pokemonNameWithAffix}}'s health is\nsapped by Leech Seed!",
|
|
||||||
"battlerTagsSeededLapseShed": "{{pokemonNameWithAffix}}'s Leech Seed\nsucked up the liquid ooze!",
|
|
||||||
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}} began\nhaving a Nightmare!",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}} is\nalready locked in a Nightmare!",
|
|
||||||
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}} is locked\nin a Nightmare!",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}} got\nan Encore!",
|
|
||||||
"battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}}'s Encore\nended!",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}} is ready to\nhelp {{pokemonName}}!",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}} absorbed\nnutrients with its roots!",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}} planted its roots!",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}} surrounded\nitself with a veil of water!",
|
|
||||||
"battlerTagsAquaRingLapse": "{{moveName}} restored\n{{pokemonName}}'s HP!",
|
|
||||||
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}} grew drowsy!",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}} is hurt\nby {{moveName}}!",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}} was squeezed by\n{{sourcePokemonName}}'s {{moveName}}!",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}} was Wrapped\nby {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}} was trapped\nin the vortex!",
|
|
||||||
"battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}} Clamped\n{{pokemonName}}!",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}} became trapped\nby {{moveName}}!",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}} became trapped\nby swirling magma!",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}} got trapped\nby a snap trap!",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}} trapped\n{{pokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}} has been afflicted \nwith an infestation by {{sourcePokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}\nprotected itself!",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}\nprotected itself!",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}} braced\nitself!",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
|
||||||
"battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}'s perish count fell to {{turnCount}}.",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} became the center\nof attention!",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}} is\nloafing around!",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} can't\nget it going!",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} finally\ngot its act together!",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}'s {{statName}}\nwas heightened!",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "The effects of {{pokemonNameWithAffix}}'s\n{{abilityName}} wore off!",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} levitated with electromagnetism!",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}'s electromagnetism wore off!",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} is getting\npumped!",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} relaxed.",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} is being salt cured!",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} is hurt by {{moveName}}!",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}} cut its own HP and put a curse on the {{pokemonName}}!",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}} is afflicted by the Curse!",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!"
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "nightmares",
|
"nightmareDesc": "nightmares",
|
||||||
"ingrainDesc": "roots",
|
"ingrainDesc": "roots",
|
||||||
"drowsyDesc": "drowsiness",
|
"drowsyDesc": "drowsiness",
|
||||||
|
"rechargingLapse": "{{pokemonNameWithAffix}} must\nrecharge!",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}} can no\nlonger escape!",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}} was freed\nfrom {{moveName}}!",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}} flinched!",
|
||||||
|
"confusedOnAdd": "{{pokemonNameWithAffix}} became\nconfused!",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}} snapped\nout of confusion!",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}} is\nalready confused!",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}} is\nconfused!",
|
||||||
|
"confusedLapseHurtItself": "It hurt itself in its\nconfusion!",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}} is unaffected\nby the effects of Destiny Bond.",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}} took\n{{pokemonNameWithAffix2}} down with it!",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}} fell in love\nwith {{sourcePokemonName}}!",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}} is\nalready in love!",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}} is in love\nwith {{sourcePokemonName}}!",
|
||||||
|
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}} is\nimmobilized by love!",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}} got over\nits infatuation.",
|
||||||
|
"seededOnAdd": "{{pokemonNameWithAffix}} was seeded!",
|
||||||
|
"seededLapse": "{{pokemonNameWithAffix}}'s health is\nsapped by Leech Seed!",
|
||||||
|
"seededLapseShed": "{{pokemonNameWithAffix}}'s Leech Seed\nsucked up the liquid ooze!",
|
||||||
|
"nightmareOnAdd": "{{pokemonNameWithAffix}} began\nhaving a Nightmare!",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}} is\nalready locked in a Nightmare!",
|
||||||
|
"nightmareLapse": "{{pokemonNameWithAffix}} is locked\nin a Nightmare!",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}} got\nan Encore!",
|
||||||
|
"encoreOnRemove": "{{pokemonNameWithAffix}}'s Encore\nended!",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}} is ready to\nhelp {{pokemonName}}!",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}} absorbed\nnutrients with its roots!",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}} planted its roots!",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}} surrounded\nitself with a veil of water!",
|
||||||
|
"aquaRingLapse": "{{moveName}} restored\n{{pokemonName}}'s HP!",
|
||||||
|
"drowsyOnAdd": "{{pokemonNameWithAffix}} grew drowsy!",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}} is hurt\nby {{moveName}}!",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}} was squeezed by\n{{sourcePokemonName}}'s {{moveName}}!",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}} was Wrapped\nby {{sourcePokemonName}}!",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}} was trapped\nin the vortex!",
|
||||||
|
"clampOnTrap": "{{sourcePokemonNameWithAffix}} Clamped\n{{pokemonName}}!",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}} became trapped\nby {{moveName}}!",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}} became trapped\nby swirling magma!",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}} got trapped\nby a snap trap!",
|
||||||
|
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}} trapped\n{{pokemonNameWithAffix}}!",
|
||||||
|
"infestationOnTrap": "{{pokemonNameWithAffix}} has been afflicted \nwith an infestation by {{sourcePokemonNameWithAffix}}!",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}}\nprotected itself!",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}}\nprotected itself!",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}} braced\nitself!",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
||||||
|
"perishSongLapse": "{{pokemonNameWithAffix}}'s perish count fell to {{turnCount}}.",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}} became the center\nof attention!",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}} is\nloafing around!",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}} can't\nget it going!",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}} finally\ngot its act together!",
|
||||||
|
"highestStatBoostOnAdd": "{{pokemonNameWithAffix}}'s {{statName}}\nwas heightened!",
|
||||||
|
"highestStatBoostOnRemove": "The effects of {{pokemonNameWithAffix}}'s\n{{abilityName}} wore off!",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}} levitated with electromagnetism!",
|
||||||
|
"magnetRisenOnRemove": "{{pokemonNameWithAffix}}'s electromagnetism wore off!",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}} is getting\npumped!",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}} relaxed.",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}} is being salt cured!",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}} is hurt by {{moveName}}!",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}} cut its own HP and put a curse on the {{pokemonName}}!",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}} is afflicted by the Curse!",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -8,14 +8,16 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"miscFilter": "Misc",
|
"miscFilter": "Misc",
|
||||||
"sortFilter": "Sort",
|
"sortFilter": "Sort",
|
||||||
"all": "All",
|
"all": "All",
|
||||||
"normal": "Normal",
|
"normal": "Not Shiny",
|
||||||
"uncaught": "Uncaught",
|
"uncaught": "Uncaught",
|
||||||
"passive": "Passive",
|
"passive": "Passive",
|
||||||
"passiveUnlocked": "Passive Unlocked",
|
"passiveUnlocked": "Passive - Yes",
|
||||||
"passiveLocked": "Passive Locked",
|
"passiveLocked": "Passive - No",
|
||||||
|
"passiveUnlockable": "Passive - Can Unlock",
|
||||||
"costReduction": "Cost Reduction",
|
"costReduction": "Cost Reduction",
|
||||||
"costReductionUnlocked": "Cost Reduction Unlocked",
|
"costReductionUnlocked": "Cost Reduction - Yes",
|
||||||
"costReductionLocked": "Cost Reduction Locked",
|
"costReductionLocked": "Cost Reduction - No",
|
||||||
|
"costReductionUnlockable": "Cost Reduction - Can Unlock",
|
||||||
"favorite": "Favorite",
|
"favorite": "Favorite",
|
||||||
"isFavorite": "Favorite - Yes",
|
"isFavorite": "Favorite - Yes",
|
||||||
"notFavorite": "Favorite - No",
|
"notFavorite": "Favorite - No",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "Hidden Ability",
|
"hiddenAbility": "Hidden Ability",
|
||||||
"hasHiddenAbility": "Hidden Ability - Yes",
|
"hasHiddenAbility": "Hidden Ability - Yes",
|
||||||
"noHiddenAbility": "Hidden Ability - No",
|
"noHiddenAbility": "Hidden Ability - No",
|
||||||
|
"egg": "Egg",
|
||||||
|
"eggPurchasable": "Purchasable Egg",
|
||||||
"pokerus": "Pokerus",
|
"pokerus": "Pokerus",
|
||||||
"hasPokerus": "Pokerus - Yes",
|
"hasPokerus": "Pokerus - Yes",
|
||||||
"noPokerus": "Pokerus - No",
|
"noPokerus": "Pokerus - No",
|
||||||
|
@ -95,65 +95,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"unlockedSomething": "{{unlockedThing}} wurde freigeschaltet.",
|
"unlockedSomething": "{{unlockedThing}} wurde freigeschaltet.",
|
||||||
"congratulations": "Glückwunsch!",
|
"congratulations": "Glückwunsch!",
|
||||||
"beatModeFirstTime": "{{speciesName}} hat den {{gameMode}} Modus zum ersten Mal beendet! Du erhältst {{newModifier}}!",
|
"beatModeFirstTime": "{{speciesName}} hat den {{gameMode}} Modus zum ersten Mal beendet! Du erhältst {{newModifier}}!",
|
||||||
"battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} kann sich wegen des Rückstoßes durch den Angriff nicht bewegen!",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} kann nicht mehr fliehen!",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} wurde von {{moveName}} befreit.",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}} ist zurückgeschreckt und kann nicht handeln!",
|
|
||||||
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}} wurde verwirrt!",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}} ist nicht mehr verwirrt!",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}} ist bereits verwirrt!",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}} ist verwirrt!",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "Es hat sich vor Verwirrung selbst verletzt!",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}} ist immun gegen den Effekt von Abgangsbund!",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}} nimmt {{pokemonNameWithAffix2}} mit sich!",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}} hat sich in {{sourcePokemonName}} verliebt!",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}} ist bereits verliebt.",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}} ist in {{sourcePokemonName}} verliebt!",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}} ist starr vor Liebe!",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}} ist nicht mehr verliebt!",
|
|
||||||
"battlerTagsSeededOnAdd": "{{pokemonNameWithAffix}} wurde bepflanzt!",
|
|
||||||
"battlerTagsSeededLapse": "{{pokemonNameWithAffix}} wurden durch Egelsamen KP geraubt!",
|
|
||||||
"battlerTagsSeededLapseShed": "Egelsamen von {{pokemonNameWithAffix}} saugt Kloakensoße auf!",
|
|
||||||
"battlerTagsNightmareOnAdd": "Nachtmahr sucht {{pokemonNameWithAffix}} heim!",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}} wird bereits von Nachtmahr heimgesucht!",
|
|
||||||
"battlerTagsNightmareLapse": "Nachtmahr schadet {{pokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}} gibt eine Zugabe",
|
|
||||||
"battlerTagsEncoreOnRemove": "Die Zugabe von {{pokemonNameWithAffix}} ist beendet!",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}} will {{pokemonName}} helfen!",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}} nimmt über seine Wurzeln Nährstoffe auf!",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}} pflanzt seine Wurzeln!",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}} umgibt sich mit einem Wasserring!",
|
|
||||||
"battlerTagsAquaRingLapse": "{{moveName}} füllt KP von {{pokemonName}} wieder auf!",
|
|
||||||
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}} wurde schläfrig gemacht!",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}} wurde durch {{moveName}} verletzt!",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}} wurde durch {{moveName}} von {{sourcePokemonName}} gequetscht!",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}} wurde von {{sourcePokemonName}} umwickelt!",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}} wird in dem Strudel gefangen!",
|
|
||||||
"battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}} wurde von {{pokemonName}} geschnappt!",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}} wurde von {{moveName}} gefangen!",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}} wurde in wirbelndem Magma eingeschlossen!",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}} wurde durch Sandgrab gefangen!",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}} hat {{pokemonNameWithAffix}} gefangen!",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{sourcePokemonNameWithAffix}} plagt {{pokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}} schützt sich selbst!",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}} schützt sich selbst!",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}} sammelt sich, um die nächste Attacke zu überstehen!",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} übersteht die Attacke!",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} übersteht die Attacke!",
|
|
||||||
"battlerTagsPerishSongLapse": "Abgesang von {{pokemonNameWithAffix}} steht bei {{turnCount}}.",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} zieht alle Aufmerksamkeit auf sich!",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}} faulenzt!",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} kommt nicht in Fahrt!",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} kriegt schließlich doch noch die Kurve!",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "{{statName}} von {{pokemonNameWithAffix}} wird verstärkt!",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "Der Effekt von {{abilityName}} von {{pokemonNameWithAffix}} lässt nach!",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} schwebt aufgrund von Elektromagnetismus!",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "Der Elektromagnetismus von {{pokemonNameWithAffix}} hört auf zu wirken!",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} läuft zu Hochtouren auf!",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} entspannt.",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} wurde eingepökelt!",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} wurde durch {{moveName}} verletzt!",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}} nimmt einen Teil seiner KP und legt einen Fluch auf {{pokemonName}}!",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}} wurde durch den Fluch verletzt!",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!"
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "Nachtmahr",
|
"nightmareDesc": "Nachtmahr",
|
||||||
"ingrainDesc": "Verwurzlung",
|
"ingrainDesc": "Verwurzlung",
|
||||||
"drowsyDesc": "Schläfrigkeit",
|
"drowsyDesc": "Schläfrigkeit",
|
||||||
|
"rechargingLapse": "{{pokemonNameWithAffix}} kann sich wegen des Rückstoßes durch den Angriff nicht bewegen!",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}} kann nicht mehr fliehen!",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}} wurde von {{moveName}} befreit.",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}} ist zurückgeschreckt und kann nicht handeln!",
|
||||||
|
"confusedOnAdd": "{{pokemonNameWithAffix}} wurde verwirrt!",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}} ist nicht mehr verwirrt!",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}} ist bereits verwirrt!",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}} ist verwirrt!",
|
||||||
|
"confusedLapseHurtItself": "Es hat sich vor Verwirrung selbst verletzt!",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}} ist immun gegen den Effekt von Abgangsbund!",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}} nimmt {{pokemonNameWithAffix2}} mit sich!",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}} hat sich in {{sourcePokemonName}} verliebt!",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}} ist bereits verliebt.",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}} ist in {{sourcePokemonName}} verliebt!",
|
||||||
|
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}} ist starr vor Liebe!",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}} ist nicht mehr verliebt!",
|
||||||
|
"seededOnAdd": "{{pokemonNameWithAffix}} wurde bepflanzt!",
|
||||||
|
"seededLapse": "{{pokemonNameWithAffix}} wurden durch Egelsamen KP geraubt!",
|
||||||
|
"seededLapseShed": "Egelsamen von {{pokemonNameWithAffix}} saugt Kloakensoße auf!",
|
||||||
|
"nightmareOnAdd": "Nachtmahr sucht {{pokemonNameWithAffix}} heim!",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}} wird bereits von Nachtmahr heimgesucht!",
|
||||||
|
"nightmareLapse": "Nachtmahr schadet {{pokemonNameWithAffix}}!",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}} gibt eine Zugabe",
|
||||||
|
"encoreOnRemove": "Die Zugabe von {{pokemonNameWithAffix}} ist beendet!",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}} will {{pokemonName}} helfen!",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}} nimmt über seine Wurzeln Nährstoffe auf!",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}} pflanzt seine Wurzeln!",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}} umgibt sich mit einem Wasserring!",
|
||||||
|
"aquaRingLapse": "{{moveName}} füllt KP von {{pokemonName}} wieder auf!",
|
||||||
|
"drowsyOnAdd": "{{pokemonNameWithAffix}} wurde schläfrig gemacht!",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}} wurde durch {{moveName}} verletzt!",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}} wurde durch {{moveName}} von {{sourcePokemonName}} gequetscht!",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}} wurde von {{sourcePokemonName}} umwickelt!",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}} wird in dem Strudel gefangen!",
|
||||||
|
"clampOnTrap": "{{sourcePokemonNameWithAffix}} wurde von {{pokemonName}} geschnappt!",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}} wurde von {{moveName}} gefangen!",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}} wurde in wirbelndem Magma eingeschlossen!",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}} wurde durch Sandgrab gefangen!",
|
||||||
|
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}} hat {{pokemonNameWithAffix}} gefangen!",
|
||||||
|
"infestationOnTrap": "{{sourcePokemonNameWithAffix}} plagt {{pokemonNameWithAffix}}!",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}} schützt sich selbst!",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}} schützt sich selbst!",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}} sammelt sich, um die nächste Attacke zu überstehen!",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}} übersteht die Attacke!",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}} übersteht die Attacke!",
|
||||||
|
"perishSongLapse": "Abgesang von {{pokemonNameWithAffix}} steht bei {{turnCount}}.",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}} zieht alle Aufmerksamkeit auf sich!",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}} faulenzt!",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}} kommt nicht in Fahrt!",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}} kriegt schließlich doch noch die Kurve!",
|
||||||
|
"highestStatBoostOnAdd": "{{statName}} von {{pokemonNameWithAffix}} wird verstärkt!",
|
||||||
|
"highestStatBoostOnRemove": "Der Effekt von {{abilityName}} von {{pokemonNameWithAffix}} lässt nach!",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}} schwebt aufgrund von Elektromagnetismus!",
|
||||||
|
"magnetRisenOnRemove": "Der Elektromagnetismus von {{pokemonNameWithAffix}} hört auf zu wirken!",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}} läuft zu Hochtouren auf!",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}} entspannt.",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}} wurde eingepökelt!",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}} wurde durch {{moveName}} verletzt!",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}} nimmt einen Teil seiner KP und legt einen Fluch auf {{pokemonName}}!",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}} wurde durch den Fluch verletzt!",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -13,9 +13,11 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"passive": "Passive",
|
"passive": "Passive",
|
||||||
"passiveUnlocked": "Passive freigeschaltet",
|
"passiveUnlocked": "Passive freigeschaltet",
|
||||||
"passiveLocked": "Passive gesperrt",
|
"passiveLocked": "Passive gesperrt",
|
||||||
|
"passiveUnlockable": "Passive - Can Unlock",
|
||||||
"costReduction": "Cost Reduction",
|
"costReduction": "Cost Reduction",
|
||||||
"costReductionUnlocked": "Cost Reduction Unlocked",
|
"costReductionUnlocked": "Cost Reduction Unlocked",
|
||||||
"costReductionLocked": "Cost Reduction Locked",
|
"costReductionLocked": "Cost Reduction Locked",
|
||||||
|
"costReductionUnlockable": "Cost Reduction - Can Unlock",
|
||||||
"favorite": "Favorite",
|
"favorite": "Favorite",
|
||||||
"isFavorite": "Favorite - Yes",
|
"isFavorite": "Favorite - Yes",
|
||||||
"notFavorite": "Favorite - No",
|
"notFavorite": "Favorite - No",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "Hidden Ability",
|
"hiddenAbility": "Hidden Ability",
|
||||||
"hasHiddenAbility": "Hidden Ability - Yes",
|
"hasHiddenAbility": "Hidden Ability - Yes",
|
||||||
"noHiddenAbility": "Hidden Ability - No",
|
"noHiddenAbility": "Hidden Ability - No",
|
||||||
|
"egg": "Egg",
|
||||||
|
"eggPurchasable": "Purchasable Egg",
|
||||||
"pokerus": "Pokerus",
|
"pokerus": "Pokerus",
|
||||||
"hasPokerus": "Pokerus - Yes",
|
"hasPokerus": "Pokerus - Yes",
|
||||||
"noPokerus": "Pokerus - No",
|
"noPokerus": "Pokerus - No",
|
||||||
|
@ -97,5 +97,6 @@ export const settings: SimpleTranslationEntries = {
|
|||||||
"controller": "Controller",
|
"controller": "Controller",
|
||||||
"gamepadSupport": "Controllerunterstützung",
|
"gamepadSupport": "Controllerunterstützung",
|
||||||
"showBgmBar": "Musiknamen anzeigen",
|
"showBgmBar": "Musiknamen anzeigen",
|
||||||
|
"moveTouchControls": "Bewegung Touch Steuerung",
|
||||||
"shopOverlayOpacity": "Shop Overlay Deckkraft",
|
"shopOverlayOpacity": "Shop Overlay Deckkraft",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -95,65 +95,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"congratulations": "Congratulations!",
|
"congratulations": "Congratulations!",
|
||||||
"beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!",
|
"beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!",
|
||||||
"ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!",
|
"ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!",
|
||||||
"battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} must\nrecharge!",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} can no\nlonger escape!",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} was freed\nfrom {{moveName}}!",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}} flinched!",
|
|
||||||
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}} became\nconfused!",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}} snapped\nout of confusion!",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}} is\nalready confused!",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}} is\nconfused!",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "It hurt itself in its\nconfusion!",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}} is unaffected\nby the effects of Destiny Bond.",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}} took\n{{pokemonNameWithAffix2}} down with it!",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}} fell in love\nwith {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}} is\nalready in love!",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}} is in love\nwith {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}} is\nimmobilized by love!",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}} got over\nits infatuation.",
|
|
||||||
"battlerTagsSeededOnAdd": "{{pokemonNameWithAffix}} was seeded!",
|
|
||||||
"battlerTagsSeededLapse": "{{pokemonNameWithAffix}}'s health is\nsapped by Leech Seed!",
|
|
||||||
"battlerTagsSeededLapseShed": "{{pokemonNameWithAffix}}'s Leech Seed\nsucked up the liquid ooze!",
|
|
||||||
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}} began\nhaving a Nightmare!",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}} is\nalready locked in a Nightmare!",
|
|
||||||
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}} is locked\nin a Nightmare!",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}} got\nan Encore!",
|
|
||||||
"battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}}'s Encore\nended!",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}} is ready to\nhelp {{pokemonName}}!",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}} absorbed\nnutrients with its roots!",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}} planted its roots!",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}} surrounded\nitself with a veil of water!",
|
|
||||||
"battlerTagsAquaRingLapse": "{{moveName}} restored\n{{pokemonName}}'s HP!",
|
|
||||||
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}} grew drowsy!",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}} is hurt\nby {{moveName}}!",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}} was squeezed by\n{{sourcePokemonName}}'s {{moveName}}!",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}} was Wrapped\nby {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}} was trapped\nin the vortex!",
|
|
||||||
"battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}} Clamped\n{{pokemonName}}!",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}} became trapped\nby {{moveName}}!",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}} became trapped\nby swirling magma!",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}} got trapped\nby a snap trap!",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}} trapped\n{{pokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}} has been afflicted \nwith an infestation by {{sourcePokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}\nprotected itself!",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}\nprotected itself!",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}} braced\nitself!",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
|
||||||
"battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}'s perish count fell to {{turnCount}}.",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} became the center\nof attention!",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}} is\nloafing around!",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} can't\nget it going!",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} finally\ngot its act together!",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}'s {{statName}}\nwas heightened!",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "The effects of {{pokemonNameWithAffix}}'s\n{{abilityName}} wore off!",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} levitated with electromagnetism!",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}'s electromagnetism wore off!",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} is getting\npumped!",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} relaxed.",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} is being salt cured!",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} is hurt by {{moveName}}!",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}} cut its own HP and put a curse on the {{pokemonName}}!",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}} is afflicted by the Curse!",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!"
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "nightmares",
|
"nightmareDesc": "nightmares",
|
||||||
"ingrainDesc": "roots",
|
"ingrainDesc": "roots",
|
||||||
"drowsyDesc": "drowsiness",
|
"drowsyDesc": "drowsiness",
|
||||||
|
"rechargingLapse": "{{pokemonNameWithAffix}} must\nrecharge!",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}} can no\nlonger escape!",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}} was freed\nfrom {{moveName}}!",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}} flinched!",
|
||||||
|
"confusedOnAdd": "{{pokemonNameWithAffix}} became\nconfused!",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}} snapped\nout of confusion!",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}} is\nalready confused!",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}} is\nconfused!",
|
||||||
|
"confusedLapseHurtItself": "It hurt itself in its\nconfusion!",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}} is unaffected\nby the effects of Destiny Bond.",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}} took\n{{pokemonNameWithAffix2}} down with it!",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}} fell in love\nwith {{sourcePokemonName}}!",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}} is\nalready in love!",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}} is in love\nwith {{sourcePokemonName}}!",
|
||||||
|
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}} is\nimmobilized by love!",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}} got over\nits infatuation.",
|
||||||
|
"seededOnAdd": "{{pokemonNameWithAffix}} was seeded!",
|
||||||
|
"seededLapse": "{{pokemonNameWithAffix}}'s health is\nsapped by Leech Seed!",
|
||||||
|
"seededLapseShed": "{{pokemonNameWithAffix}}'s Leech Seed\nsucked up the liquid ooze!",
|
||||||
|
"nightmareOnAdd": "{{pokemonNameWithAffix}} began\nhaving a Nightmare!",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}} is\nalready locked in a Nightmare!",
|
||||||
|
"nightmareLapse": "{{pokemonNameWithAffix}} is locked\nin a Nightmare!",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}} got\nan Encore!",
|
||||||
|
"encoreOnRemove": "{{pokemonNameWithAffix}}'s Encore\nended!",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}} is ready to\nhelp {{pokemonName}}!",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}} absorbed\nnutrients with its roots!",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}} planted its roots!",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}} surrounded\nitself with a veil of water!",
|
||||||
|
"aquaRingLapse": "{{moveName}} restored\n{{pokemonName}}'s HP!",
|
||||||
|
"drowsyOnAdd": "{{pokemonNameWithAffix}} grew drowsy!",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}} is hurt\nby {{moveName}}!",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}} was squeezed by\n{{sourcePokemonName}}'s {{moveName}}!",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}} was Wrapped\nby {{sourcePokemonName}}!",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}} was trapped\nin the vortex!",
|
||||||
|
"clampOnTrap": "{{sourcePokemonNameWithAffix}} Clamped\n{{pokemonName}}!",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}} became trapped\nby {{moveName}}!",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}} became trapped\nby swirling magma!",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}} got trapped\nby a snap trap!",
|
||||||
|
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}} trapped\n{{pokemonNameWithAffix}}!",
|
||||||
|
"infestationOnTrap": "{{pokemonNameWithAffix}} has been afflicted \nwith an infestation by {{sourcePokemonNameWithAffix}}!",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}}\nprotected itself!",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}}\nprotected itself!",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}} braced\nitself!",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
||||||
|
"perishSongLapse": "{{pokemonNameWithAffix}}'s perish count fell to {{turnCount}}.",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}} became the center\nof attention!",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}} is\nloafing around!",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}} can't\nget it going!",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}} finally\ngot its act together!",
|
||||||
|
"highestStatBoostOnAdd": "{{pokemonNameWithAffix}}'s {{statName}}\nwas heightened!",
|
||||||
|
"highestStatBoostOnRemove": "The effects of {{pokemonNameWithAffix}}'s\n{{abilityName}} wore off!",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}} levitated with electromagnetism!",
|
||||||
|
"magnetRisenOnRemove": "{{pokemonNameWithAffix}}'s electromagnetism wore off!",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}} is getting\npumped!",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}} relaxed.",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}} is being salt cured!",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}} is hurt by {{moveName}}!",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}} cut its own HP and put a curse on the {{pokemonName}}!",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}} is afflicted by the Curse!",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -11,11 +11,13 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"normal": "Not Shiny",
|
"normal": "Not Shiny",
|
||||||
"uncaught": "Uncaught",
|
"uncaught": "Uncaught",
|
||||||
"passive": "Passive",
|
"passive": "Passive",
|
||||||
"passiveUnlocked": "Passive Unlocked",
|
"passiveUnlocked": "Passive - Yes",
|
||||||
"passiveLocked": "Passive Locked",
|
"passiveLocked": "Passive - No",
|
||||||
|
"passiveUnlockable": "Passive - Can Unlock",
|
||||||
"costReduction": "Cost Reduction",
|
"costReduction": "Cost Reduction",
|
||||||
"costReductionUnlocked": "Cost Reduction Unlocked",
|
"costReductionUnlocked": "Cost Reduction - Yes",
|
||||||
"costReductionLocked": "Cost Reduction Locked",
|
"costReductionLocked": "Cost Reduction - No",
|
||||||
|
"costReductionUnlockable": "Cost Reduction - Can Unlock",
|
||||||
"favorite": "Favorite",
|
"favorite": "Favorite",
|
||||||
"isFavorite": "Favorite - Yes",
|
"isFavorite": "Favorite - Yes",
|
||||||
"notFavorite": "Favorite - No",
|
"notFavorite": "Favorite - No",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "Hidden Ability",
|
"hiddenAbility": "Hidden Ability",
|
||||||
"hasHiddenAbility": "Hidden Ability - Yes",
|
"hasHiddenAbility": "Hidden Ability - Yes",
|
||||||
"noHiddenAbility": "Hidden Ability - No",
|
"noHiddenAbility": "Hidden Ability - No",
|
||||||
|
"egg": "Egg",
|
||||||
|
"eggPurchasable": "Purchasable Egg",
|
||||||
"pokerus": "Pokerus",
|
"pokerus": "Pokerus",
|
||||||
"hasPokerus": "Pokerus - Yes",
|
"hasPokerus": "Pokerus - Yes",
|
||||||
"noPokerus": "Pokerus - No",
|
"noPokerus": "Pokerus - No",
|
||||||
|
@ -97,5 +97,6 @@ export const settings: SimpleTranslationEntries = {
|
|||||||
"controller": "Controller",
|
"controller": "Controller",
|
||||||
"gamepadSupport": "Gamepad Support",
|
"gamepadSupport": "Gamepad Support",
|
||||||
"showBgmBar": "Show Music Names",
|
"showBgmBar": "Show Music Names",
|
||||||
|
"moveTouchControls": "Move Touch Controls",
|
||||||
"shopOverlayOpacity": "Shop Overlay Opacity"
|
"shopOverlayOpacity": "Shop Overlay Opacity"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -95,65 +95,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"congratulations": "Congratulations!",
|
"congratulations": "Congratulations!",
|
||||||
"beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!",
|
"beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!",
|
||||||
"ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!",
|
"ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!",
|
||||||
"battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} must\nrecharge!",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} can no\nlonger escape!",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} was freed\nfrom {{moveName}}!",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}} flinched!",
|
|
||||||
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}} became\nconfused!",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}} snapped\nout of confusion!",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}} is\nalready confused!",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}} is\nconfused!",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "It hurt itself in its\nconfusion!",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}} is unaffected\nby the effects of Destiny Bond.",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}} took\n{{pokemonNameWithAffix2}} down with it!",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}} fell in love\nwith {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}} is\nalready in love!",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}} is in love\nwith {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}} is\nimmobilized by love!",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}} got over\nits infatuation.",
|
|
||||||
"battlerTagsSeededOnAdd": "{{pokemonNameWithAffix}} was seeded!",
|
|
||||||
"battlerTagsSeededLapse": "{{pokemonNameWithAffix}}'s health is\nsapped by Leech Seed!",
|
|
||||||
"battlerTagsSeededLapseShed": "{{pokemonNameWithAffix}}'s Leech Seed\nsucked up the liquid ooze!",
|
|
||||||
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}} began\nhaving a Nightmare!",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}} is\nalready locked in a Nightmare!",
|
|
||||||
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}} is locked\nin a Nightmare!",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}} got\nan Encore!",
|
|
||||||
"battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}}'s Encore\nended!",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}} is ready to\nhelp {{pokemonName}}!",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}} absorbed\nnutrients with its roots!",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}} planted its roots!",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}} surrounded\nitself with a veil of water!",
|
|
||||||
"battlerTagsAquaRingLapse": "{{moveName}} restored\n{{pokemonName}}'s HP!",
|
|
||||||
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}} grew drowsy!",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}} is hurt\nby {{moveName}}!",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}} was squeezed by\n{{sourcePokemonName}}'s {{moveName}}!",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}} was Wrapped\nby {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}} was trapped\nin the vortex!",
|
|
||||||
"battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}} Clamped\n{{pokemonName}}!",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}} became trapped\nby {{moveName}}!",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}} became trapped\nby swirling magma!",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}} got trapped\nby a snap trap!",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}} trapped\n{{pokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}} has been afflicted \nwith an infestation by {{sourcePokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}\nprotected itself!",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}\nprotected itself!",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}} braced\nitself!",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
|
||||||
"battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}'s perish count fell to {{turnCount}}.",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} became the center\nof attention!",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}} is\nloafing around!",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} can't\nget it going!",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} finally\ngot its act together!",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}'s {{statName}}\nwas heightened!",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "The effects of {{pokemonNameWithAffix}}'s\n{{abilityName}} wore off!",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} levitated with electromagnetism!",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}'s electromagnetism wore off!",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} is getting\npumped!",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} relaxed.",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} is being salt cured!",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} is hurt by {{moveName}}!",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}} cut its own HP and put a curse on the {{pokemonName}}!",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}} is afflicted by the Curse!",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!"
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "nightmares",
|
"nightmareDesc": "nightmares",
|
||||||
"ingrainDesc": "roots",
|
"ingrainDesc": "roots",
|
||||||
"drowsyDesc": "drowsiness",
|
"drowsyDesc": "drowsiness",
|
||||||
|
"rechargingLapse": "{{pokemonNameWithAffix}} must\nrecharge!",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}} can no\nlonger escape!",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}} was freed\nfrom {{moveName}}!",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}} flinched!",
|
||||||
|
"confusedOnAdd": "{{pokemonNameWithAffix}} became\nconfused!",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}} snapped\nout of confusion!",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}} is\nalready confused!",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}} is\nconfused!",
|
||||||
|
"confusedLapseHurtItself": "It hurt itself in its\nconfusion!",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}} is unaffected\nby the effects of Destiny Bond.",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}} took\n{{pokemonNameWithAffix2}} down with it!",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}} fell in love\nwith {{sourcePokemonName}}!",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}} is\nalready in love!",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}} is in love\nwith {{sourcePokemonName}}!",
|
||||||
|
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}} is\nimmobilized by love!",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}} got over\nits infatuation.",
|
||||||
|
"seededOnAdd": "{{pokemonNameWithAffix}} was seeded!",
|
||||||
|
"seededLapse": "{{pokemonNameWithAffix}}'s health is\nsapped by Leech Seed!",
|
||||||
|
"seededLapseShed": "{{pokemonNameWithAffix}}'s Leech Seed\nsucked up the liquid ooze!",
|
||||||
|
"nightmareOnAdd": "{{pokemonNameWithAffix}} began\nhaving a Nightmare!",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}} is\nalready locked in a Nightmare!",
|
||||||
|
"nightmareLapse": "{{pokemonNameWithAffix}} is locked\nin a Nightmare!",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}} got\nan Encore!",
|
||||||
|
"encoreOnRemove": "{{pokemonNameWithAffix}}'s Encore\nended!",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}} is ready to\nhelp {{pokemonName}}!",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}} absorbed\nnutrients with its roots!",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}} planted its roots!",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}} surrounded\nitself with a veil of water!",
|
||||||
|
"aquaRingLapse": "{{moveName}} restored\n{{pokemonName}}'s HP!",
|
||||||
|
"drowsyOnAdd": "{{pokemonNameWithAffix}} grew drowsy!",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}} is hurt\nby {{moveName}}!",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}} was squeezed by\n{{sourcePokemonName}}'s {{moveName}}!",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}} was Wrapped\nby {{sourcePokemonName}}!",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}} was trapped\nin the vortex!",
|
||||||
|
"clampOnTrap": "{{sourcePokemonNameWithAffix}} Clamped\n{{pokemonName}}!",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}} became trapped\nby {{moveName}}!",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}} became trapped\nby swirling magma!",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}} got trapped\nby a snap trap!",
|
||||||
|
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}} trapped\n{{pokemonNameWithAffix}}!",
|
||||||
|
"infestationOnTrap": "{{pokemonNameWithAffix}} has been afflicted \nwith an infestation by {{sourcePokemonNameWithAffix}}!",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}}\nprotected itself!",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}}\nprotected itself!",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}} braced\nitself!",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}} endured\nthe hit!",
|
||||||
|
"perishSongLapse": "{{pokemonNameWithAffix}}'s perish count fell to {{turnCount}}.",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}} became the center\nof attention!",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}} is\nloafing around!",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}} can't\nget it going!",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}} finally\ngot its act together!",
|
||||||
|
"highestStatBoostOnAdd": "{{pokemonNameWithAffix}}'s {{statName}}\nwas heightened!",
|
||||||
|
"highestStatBoostOnRemove": "The effects of {{pokemonNameWithAffix}}'s\n{{abilityName}} wore off!",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}} levitated with electromagnetism!",
|
||||||
|
"magnetRisenOnRemove": "{{pokemonNameWithAffix}}'s electromagnetism wore off!",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}} is getting\npumped!",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}} relaxed.",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}} is being salt cured!",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}} is hurt by {{moveName}}!",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}} cut its own HP and put a curse on the {{pokemonName}}!",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}} is afflicted by the Curse!",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -13,9 +13,11 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"passive": "Passive",
|
"passive": "Passive",
|
||||||
"passiveUnlocked": "Pasiva Desbloq.",
|
"passiveUnlocked": "Pasiva Desbloq.",
|
||||||
"passiveLocked": "Pasiva Bloq.",
|
"passiveLocked": "Pasiva Bloq.",
|
||||||
|
"passiveUnlockable": "Passive - Can Unlock",
|
||||||
"costReduction": "Cost Reduction",
|
"costReduction": "Cost Reduction",
|
||||||
"costReductionUnlocked": "Cost Reduction Unlocked",
|
"costReductionUnlocked": "Cost Reduction Unlocked",
|
||||||
"costReductionLocked": "Cost Reduction Locked",
|
"costReductionLocked": "Cost Reduction Locked",
|
||||||
|
"costReductionUnlockable": "Cost Reduction - Can Unlock",
|
||||||
"favorite": "Favorite",
|
"favorite": "Favorite",
|
||||||
"isFavorite": "Favorite - Yes",
|
"isFavorite": "Favorite - Yes",
|
||||||
"notFavorite": "Favorite - No",
|
"notFavorite": "Favorite - No",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "Hidden Ability",
|
"hiddenAbility": "Hidden Ability",
|
||||||
"hasHiddenAbility": "Hidden Ability - Yes",
|
"hasHiddenAbility": "Hidden Ability - Yes",
|
||||||
"noHiddenAbility": "Hidden Ability - No",
|
"noHiddenAbility": "Hidden Ability - No",
|
||||||
|
"egg": "Egg",
|
||||||
|
"eggPurchasable": "Purchasable Egg",
|
||||||
"pokerus": "Pokerus",
|
"pokerus": "Pokerus",
|
||||||
"hasPokerus": "Pokerus - Yes",
|
"hasPokerus": "Pokerus - Yes",
|
||||||
"noPokerus": "Pokerus - No",
|
"noPokerus": "Pokerus - No",
|
||||||
|
@ -97,5 +97,6 @@ export const settings: SimpleTranslationEntries = {
|
|||||||
"controller": "Controller",
|
"controller": "Controller",
|
||||||
"gamepadSupport": "Gamepad Support",
|
"gamepadSupport": "Gamepad Support",
|
||||||
"showBgmBar": "Show Music Names",
|
"showBgmBar": "Show Music Names",
|
||||||
|
"moveTouchControls": "Move Touch Controls",
|
||||||
"shopOverlayOpacity": "Opacidad de la fase de compra"
|
"shopOverlayOpacity": "Opacidad de la fase de compra"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -95,65 +95,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"unlockedSomething": "{{unlockedThing}}\na été débloqué.",
|
"unlockedSomething": "{{unlockedThing}}\na été débloqué.",
|
||||||
"congratulations": "Félicitations !",
|
"congratulations": "Félicitations !",
|
||||||
"beatModeFirstTime": "{{speciesName}} a battu le mode {{gameMode}} pour la première fois !\nVous avez reçu {{newModifier}} !",
|
"beatModeFirstTime": "{{speciesName}} a battu le mode {{gameMode}} pour la première fois !\nVous avez reçu {{newModifier}} !",
|
||||||
"battlerTagsRechargingLapse": "Le contrecoup empêche {{pokemonNameWithAffix}}\n de bouger !",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}\nne peut plus s’échapper !",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} est libéré\nde la capacité {{moveName}} !",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}} a la trouille !\nIl ne peut plus attaquer !",
|
|
||||||
"battlerTagsConfusedOnAdd": "Ça rend {{pokemonNameWithAffix}}\nconfus !",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}}\nn’est plus confus !",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}}\nest déjà confus !",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}}\nest confus !",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "Il se blesse dans sa confusion.",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}} n’est pas affecté\nle Lien du Destin !",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}} entraine\n{{pokemonNameWithAffix2}} dans sa chute !",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}} est amoureux\nde {{sourcePokemonName}} !",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}} est\ndéjà amoureux !",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}} est amoureux\nde {{sourcePokemonName}} !",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "L’amour empêche {{pokemonNameWithAffix}}\nd’agir !",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}}\nn’est plus amoureux !",
|
|
||||||
"battlerTagsSeededOnAdd": "{{pokemonNameWithAffix}} est infecté !",
|
|
||||||
"battlerTagsSeededLapse": "Vampigraine draine l’énergie\nde {{pokemonNameWithAffix}} !",
|
|
||||||
"battlerTagsSeededLapseShed": "La Vampigraine de {{pokemonNameWithAffix}}\naspire le suintement !",
|
|
||||||
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}} commence à cauchemarder !",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}} est\ndéjà prisonnier d’un cauchemar !",
|
|
||||||
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}}est\nprisonnier d’un cauchemar !",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}} !\nEncore une fois !",
|
|
||||||
"battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}} n’est\nplus obligé d’utiliser la même capacité !",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}} est prêt\nà aider {{pokemonName}} !",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}} absorbe\ndes nutriments avec ses racines !",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}}\nplante ses racines !",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}} s’entoure\nd’un voile d’eau !",
|
|
||||||
"battlerTagsAquaRingLapse": "{{moveName}} restaure\nles PV de {{pokemonName}} !",
|
|
||||||
"battlerTagsDrowsyOnAdd": "Ça rend {{pokemonNameWithAffix}} somnolent !",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}} est blessé\npar la capacité {{moveName}} !",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}} est pris dans\nl’étreinte de {{sourcePokemonName}} !",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}} est ligoté\npar {{sourcePokemonName}} !",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}} est piégé\ndans le tourbillon !",
|
|
||||||
"battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}} est pris dans le Claquoir\nde {{pokemonName}} !",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}} est piégé\npar {{moveName}} !",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}} est piégé\ndans un tourbillon de magma !",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}} est tombé\ndans un Troquenard !",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{pokemonNameWithAffix}} se fait emprisonner\npar {{sourcePokemonNameWithAffix}} !",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}} est harcelé\npar {{sourcePokemonNameWithAffix}} !",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}\nest prêt à se protéger !",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}\nse protège !",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}} se prépare\nà encaisser les coups !",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}\nencaisse les coups !",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}\nencaisse les coups !",
|
|
||||||
"battlerTagsPerishSongLapse": "Le compte à rebours de Requiem\nde {{pokemonNameWithAffix}} descend à {{turnCount}} !",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} devient\nle centre de l’attention !",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}} paresse !",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}\nn’arrive pas à se motiver !",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}\narrive enfin à s’y mettre sérieusement !",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "{{statName}} de {{pokemonNameWithAffix}}\nest renforcée !",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "L’effet du talent {{abilityName}}\nde {{pokemonNameWithAffix}} se dissipe !",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} lévite\nsur un champ magnétique !",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "Le magnétisme de{{pokemonNameWithAffix}}\nse dissipe !",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}\nest prêt à tout donner !",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} se détend.",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}}\nest couvert de sel !",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} est blessé\npar la capacité {{moveName}} !",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}} sacrifie des PV\net lance une malédiction sur {{pokemonName}} !",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}} est touché par la malédiction !",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!"
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "les cauchemars",
|
"nightmareDesc": "les cauchemars",
|
||||||
"ingrainDesc": "l’enracinement",
|
"ingrainDesc": "l’enracinement",
|
||||||
"drowsyDesc": "la somnolence",
|
"drowsyDesc": "la somnolence",
|
||||||
|
"rechargingLapse": "Le contrecoup empêche {{pokemonNameWithAffix}}\n de bouger !",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}}\nne peut plus s’échapper !",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}} est libéré\nde la capacité {{moveName}} !",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}} a la trouille !\nIl ne peut plus attaquer !",
|
||||||
|
"confusedOnAdd": "Ça rend {{pokemonNameWithAffix}}\nconfus !",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}}\nn’est plus confus !",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}}\nest déjà confus !",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}}\nest confus !",
|
||||||
|
"confusedLapseHurtItself": "Il se blesse dans sa confusion.",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}} n’est pas affecté\nle Lien du Destin !",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}} entraine\n{{pokemonNameWithAffix2}} dans sa chute !",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}} est amoureux\nde {{sourcePokemonName}} !",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}} est\ndéjà amoureux !",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}} est amoureux\nde {{sourcePokemonName}} !",
|
||||||
|
"infatuatedLapseImmobilize": "L’amour empêche {{pokemonNameWithAffix}}\nd’agir !",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}}\nn’est plus amoureux !",
|
||||||
|
"seededOnAdd": "{{pokemonNameWithAffix}} est infecté !",
|
||||||
|
"seededLapse": "Vampigraine draine l’énergie\nde {{pokemonNameWithAffix}} !",
|
||||||
|
"seededLapseShed": "La Vampigraine de {{pokemonNameWithAffix}}\naspire le suintement !",
|
||||||
|
"nightmareOnAdd": "{{pokemonNameWithAffix}} commence à cauchemarder !",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}} est\ndéjà prisonnier d’un cauchemar !",
|
||||||
|
"nightmareLapse": "{{pokemonNameWithAffix}}est\nprisonnier d’un cauchemar !",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}} !\nEncore une fois !",
|
||||||
|
"encoreOnRemove": "{{pokemonNameWithAffix}} n’est\nplus obligé d’utiliser la même capacité !",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}} est prêt\nà aider {{pokemonName}} !",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}} absorbe\ndes nutriments avec ses racines !",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}}\nplante ses racines !",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}} s’entoure\nd’un voile d’eau !",
|
||||||
|
"aquaRingLapse": "{{moveName}} restaure\nles PV de {{pokemonName}} !",
|
||||||
|
"drowsyOnAdd": "Ça rend {{pokemonNameWithAffix}} somnolent !",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}} est blessé\npar la capacité {{moveName}} !",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}} est pris dans\nl’étreinte de {{sourcePokemonName}} !",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}} est ligoté\npar {{sourcePokemonName}} !",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}} est piégé\ndans le tourbillon !",
|
||||||
|
"clampOnTrap": "{{sourcePokemonNameWithAffix}} est pris dans le Claquoir\nde {{pokemonName}} !",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}} est piégé\npar {{moveName}} !",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}} est piégé\ndans un tourbillon de magma !",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}} est tombé\ndans un Troquenard !",
|
||||||
|
"thunderCageOnTrap": "{{pokemonNameWithAffix}} se fait emprisonner\npar {{sourcePokemonNameWithAffix}} !",
|
||||||
|
"infestationOnTrap": "{{pokemonNameWithAffix}} est harcelé\npar {{sourcePokemonNameWithAffix}} !",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}}\nest prêt à se protéger !",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}}\nse protège !",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}} se prépare\nà encaisser les coups !",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}}\nencaisse les coups !",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}}\nencaisse les coups !",
|
||||||
|
"perishSongLapse": "Le compte à rebours de Requiem\nde {{pokemonNameWithAffix}} descend à {{turnCount}} !",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}} devient\nle centre de l’attention !",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}} paresse !",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}}\nn’arrive pas à se motiver !",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}}\narrive enfin à s’y mettre sérieusement !",
|
||||||
|
"highestStatBoostOnAdd": "{{statName}} de {{pokemonNameWithAffix}}\nest renforcée !",
|
||||||
|
"highestStatBoostOnRemove": "L’effet du talent {{abilityName}}\nde {{pokemonNameWithAffix}} se dissipe !",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}} lévite\nsur un champ magnétique !",
|
||||||
|
"magnetRisenOnRemove": "Le magnétisme de{{pokemonNameWithAffix}}\nse dissipe !",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}}\nest prêt à tout donner !",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}} se détend.",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}}\nest couvert de sel !",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}} est blessé\npar la capacité {{moveName}} !",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}} sacrifie des PV\net lance une malédiction sur {{pokemonName}} !",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}} est touché par la malédiction !",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -13,9 +13,11 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"passive": "Passif",
|
"passive": "Passif",
|
||||||
"passiveUnlocked": "Passif débloqué",
|
"passiveUnlocked": "Passif débloqué",
|
||||||
"passiveLocked": "Passif verrouillé",
|
"passiveLocked": "Passif verrouillé",
|
||||||
|
"passiveUnlockable": "Passive - Can Unlock",
|
||||||
"costReduction": "Cost Reduction",
|
"costReduction": "Cost Reduction",
|
||||||
"costReductionUnlocked": "Cost Reduction Unlocked",
|
"costReductionUnlocked": "Cost Reduction Unlocked",
|
||||||
"costReductionLocked": "Cost Reduction Locked",
|
"costReductionLocked": "Cost Reduction Locked",
|
||||||
|
"costReductionUnlockable": "Cost Reduction - Can Unlock",
|
||||||
"favorite": "Favorite",
|
"favorite": "Favorite",
|
||||||
"isFavorite": "Favorite - Yes",
|
"isFavorite": "Favorite - Yes",
|
||||||
"notFavorite": "Favorite - No",
|
"notFavorite": "Favorite - No",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "Hidden Ability",
|
"hiddenAbility": "Hidden Ability",
|
||||||
"hasHiddenAbility": "Hidden Ability - Yes",
|
"hasHiddenAbility": "Hidden Ability - Yes",
|
||||||
"noHiddenAbility": "Hidden Ability - No",
|
"noHiddenAbility": "Hidden Ability - No",
|
||||||
|
"egg": "Egg",
|
||||||
|
"eggPurchasable": "Purchasable Egg",
|
||||||
"pokerus": "Pokerus",
|
"pokerus": "Pokerus",
|
||||||
"hasPokerus": "Pokerus - Yes",
|
"hasPokerus": "Pokerus - Yes",
|
||||||
"noPokerus": "Pokerus - No",
|
"noPokerus": "Pokerus - No",
|
||||||
|
@ -97,5 +97,6 @@ export const settings: SimpleTranslationEntries = {
|
|||||||
"controller": "Controller",
|
"controller": "Controller",
|
||||||
"gamepadSupport": "Gamepad Support",
|
"gamepadSupport": "Gamepad Support",
|
||||||
"showBgmBar": "Titre de la musique",
|
"showBgmBar": "Titre de la musique",
|
||||||
|
"moveTouchControls": "Déplacer les contrôles tactiles",
|
||||||
"shopOverlayOpacity": "Opacité boutique"
|
"shopOverlayOpacity": "Opacité boutique"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -95,65 +95,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"congratulations": "Congratulazioni!",
|
"congratulations": "Congratulazioni!",
|
||||||
"beatModeFirstTime": "{{speciesName}} ha completato la modalità {{gameMode}} per la prima volta!\nHai ricevuto {{newModifier}}!",
|
"beatModeFirstTime": "{{speciesName}} ha completato la modalità {{gameMode}} per la prima volta!\nHai ricevuto {{newModifier}}!",
|
||||||
"ppReduced": "I PP della mossa {{moveName}} di\n{{targetName}} sono stati ridotti di {{reduction}}!",
|
"ppReduced": "I PP della mossa {{moveName}} di\n{{targetName}} sono stati ridotti di {{reduction}}!",
|
||||||
"battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} deve\nricaricarsi!",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} non può\npiù fuggire!",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} è stato liberato\nda {{moveName}}",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}} tentenna!",
|
|
||||||
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}} è\nconfuso!",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}} non\nè più confuso!",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}} è\ngià confuso!",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}} è\nconfuso!",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "Si colpisce da solo per via della\nconfusione!",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}} è immune\na Destinobbligato.",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}} trascina\ncon sé{{pokemonNameWithAffix2}}!",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}} si è infatuato\ndi {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}} è\ngià infatuato!",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}} è infatuato\ndi {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}} è\nimmobilizzato dall'infatuazione!",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}} non è\npiù infatuato.",
|
|
||||||
"battlerTagsSeededOnAdd": "{{pokemonNameWithAffix}} è pieno di semi!",
|
|
||||||
"battlerTagsSeededLapse": "La salute di {{pokemonNameWithAffix}}\nviene prelevata da Parassiseme!",
|
|
||||||
"battlerTagsSeededLapseShed": "Parassiseme di {{pokemonNameWithAffix}}\nha risucchiato la melma!",
|
|
||||||
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}} sta\navendo un Incubo!",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}} sta\ngià avendo un Incubo!",
|
|
||||||
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}} è bloccato\nin un Incubo!",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}} ha\nsubito Ripeti!",
|
|
||||||
"battlerTagsEncoreOnRemove": "L'effetto di Ripeti su {{pokemonNameWithAffix}}\n è terminato!",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}} è pronto ad\naiutare {{pokemonName}}!",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}} assorbe\nnutrienti dalle sue radici!",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}} ha messo le radici!",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}} si è circondato\ncon un velo d'acqua!",
|
|
||||||
"battlerTagsAquaRingLapse": "{{moveName}} ha ripristinato\ni PS di {{pokemonName}}!",
|
|
||||||
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}} sta per addormentarsi!",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}} subisce danni\nper via di {{moveName}}!",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}} viene schiacciato da\n{{moveName}} di {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}} è stato avvinghiato\nda {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}} è intrappolato\nnel vortice!",
|
|
||||||
"battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}} sta intenagliando\n{{pokemonName}}!",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}} è intrappolato\nda {{moveName}}!",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}} è intrappolato\nnel magma vorticoso!",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}} è intrappolato\nin una tagliola!",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}} ha intrappolato\n{{pokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}} ha subito un\ninfestazione da parte di {{sourcePokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}\nsi è protetto!",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}\nsi è protetto!",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}} si prepara a\nsubire il colpo!",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} resiste\nal colpo!",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} ha resistito\ngrazie a Vigore!",
|
|
||||||
"battlerTagsPerishSongLapse": "Il conto alla rovescia di Ultimocanto per {{pokemonNameWithAffix}} scende a {{turnCount}}.",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} è al centro\ndell’attenzione!",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}} sta\nciondolando!",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} non\ningrana!",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} ritrova\nlo slancio!",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "{{statName}} di {{pokemonNameWithAffix}}\nviene aumentato/a!",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "Gli effetti di {{abilityName}}\ndi {{pokemonNameWithAffix}} sono cessati!",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} si solleva in aria\na causa dell’elettromagnetismo!",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "L’effetto dell’elettromagnetismo di {{pokemonNameWithAffix}}\nè terminato!",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} si prepara\nalla lotta!",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} si è rilassato.",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} è stato messo sotto sale!",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} viene colpito da {{moveName}}!",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}} ha sacrificato metà dei suoi PS per\nlanciare una maledizione su {{pokemonName}}!",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}} subisce la maledizione!",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}} ha usato Accumulo per la\n{{stockpiledCount}}ª volta!"
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "nightmares",
|
"nightmareDesc": "nightmares",
|
||||||
"ingrainDesc": "roots",
|
"ingrainDesc": "roots",
|
||||||
"drowsyDesc": "drowsiness",
|
"drowsyDesc": "drowsiness",
|
||||||
|
"rechargingLapse": "{{pokemonNameWithAffix}} deve\nricaricarsi!",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}} non può\npiù fuggire!",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}} è stato liberato\nda {{moveName}}",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}} tentenna!",
|
||||||
|
"confusedOnAdd": "{{pokemonNameWithAffix}} è\nconfuso!",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}} non\nè più confuso!",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}} è\ngià confuso!",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}} è\nconfuso!",
|
||||||
|
"confusedLapseHurtItself": "Si colpisce da solo per via della\nconfusione!",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}} è immune\na Destinobbligato.",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}} trascina\ncon sé{{pokemonNameWithAffix2}}!",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}} si è infatuato\ndi {{sourcePokemonName}}!",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}} è\ngià infatuato!",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}} è infatuato\ndi {{sourcePokemonName}}!",
|
||||||
|
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}} è\nimmobilizzato dall'infatuazione!",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}} non è\npiù infatuato.",
|
||||||
|
"seededOnAdd": "{{pokemonNameWithAffix}} è pieno di semi!",
|
||||||
|
"seededLapse": "La salute di {{pokemonNameWithAffix}}\nviene prelevata da Parassiseme!",
|
||||||
|
"seededLapseShed": "Parassiseme di {{pokemonNameWithAffix}}\nha risucchiato la melma!",
|
||||||
|
"nightmareOnAdd": "{{pokemonNameWithAffix}} sta\navendo un Incubo!",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}} sta\ngià avendo un Incubo!",
|
||||||
|
"nightmareLapse": "{{pokemonNameWithAffix}} è bloccato\nin un Incubo!",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}} ha\nsubito Ripeti!",
|
||||||
|
"encoreOnRemove": "L'effetto di Ripeti su {{pokemonNameWithAffix}}\n è terminato!",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}} è pronto ad\naiutare {{pokemonName}}!",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}} assorbe\nnutrienti dalle sue radici!",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}} ha messo le radici!",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}} si è circondato\ncon un velo d'acqua!",
|
||||||
|
"aquaRingLapse": "{{moveName}} ha ripristinato\ni PS di {{pokemonName}}!",
|
||||||
|
"drowsyOnAdd": "{{pokemonNameWithAffix}} sta per addormentarsi!",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}} subisce danni\nper via di {{moveName}}!",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}} viene schiacciato da\n{{moveName}} di {{sourcePokemonName}}!",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}} è stato avvinghiato\nda {{sourcePokemonName}}!",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}} è intrappolato\nnel vortice!",
|
||||||
|
"clampOnTrap": "{{sourcePokemonNameWithAffix}} sta intenagliando\n{{pokemonName}}!",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}} è intrappolato\nda {{moveName}}!",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}} è intrappolato\nnel magma vorticoso!",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}} è intrappolato\nin una tagliola!",
|
||||||
|
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}} ha intrappolato\n{{pokemonNameWithAffix}}!",
|
||||||
|
"infestationOnTrap": "{{pokemonNameWithAffix}} ha subito un\ninfestazione da parte di {{sourcePokemonNameWithAffix}}!",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}}\nsi è protetto!",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}}\nsi è protetto!",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}} si prepara a\nsubire il colpo!",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}} resiste\nal colpo!",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}} ha resistito\ngrazie a Vigore!",
|
||||||
|
"perishSongLapse": "Il conto alla rovescia di Ultimocanto per {{pokemonNameWithAffix}} scende a {{turnCount}}.",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}} è al centro\ndell’attenzione!",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}} sta\nciondolando!",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}} non\ningrana!",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}} ritrova\nlo slancio!",
|
||||||
|
"highestStatBoostOnAdd": "{{statName}} di {{pokemonNameWithAffix}}\nviene aumentato/a!",
|
||||||
|
"highestStatBoostOnRemove": "Gli effetti di {{abilityName}}\ndi {{pokemonNameWithAffix}} sono cessati!",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}} si solleva in aria\na causa dell’elettromagnetismo!",
|
||||||
|
"magnetRisenOnRemove": "L’effetto dell’elettromagnetismo di {{pokemonNameWithAffix}}\nè terminato!",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}} si prepara\nalla lotta!",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}} si è rilassato.",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}} è stato messo sotto sale!",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}} viene colpito da {{moveName}}!",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}} ha sacrificato metà dei suoi PS per\nlanciare una maledizione su {{pokemonName}}!",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}} subisce la maledizione!",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}} ha usato Accumulo per la\n{{stockpiledCount}}ª volta!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -13,9 +13,11 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"passive": "Passive",
|
"passive": "Passive",
|
||||||
"passiveUnlocked": "Passiva sbloccata",
|
"passiveUnlocked": "Passiva sbloccata",
|
||||||
"passiveLocked": "Passiva bloccata",
|
"passiveLocked": "Passiva bloccata",
|
||||||
|
"passiveUnlockable": "Passive - Can Unlock",
|
||||||
"costReduction": "Cost Reduction",
|
"costReduction": "Cost Reduction",
|
||||||
"costReductionUnlocked": "Cost Reduction Unlocked",
|
"costReductionUnlocked": "Cost Reduction Unlocked",
|
||||||
"costReductionLocked": "Cost Reduction Locked",
|
"costReductionLocked": "Cost Reduction Locked",
|
||||||
|
"costReductionUnlockable": "Cost Reduction - Can Unlock",
|
||||||
"favorite": "Favorite",
|
"favorite": "Favorite",
|
||||||
"isFavorite": "Favorite - Yes",
|
"isFavorite": "Favorite - Yes",
|
||||||
"notFavorite": "Favorite - No",
|
"notFavorite": "Favorite - No",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "Hidden Ability",
|
"hiddenAbility": "Hidden Ability",
|
||||||
"hasHiddenAbility": "Hidden Ability - Yes",
|
"hasHiddenAbility": "Hidden Ability - Yes",
|
||||||
"noHiddenAbility": "Hidden Ability - No",
|
"noHiddenAbility": "Hidden Ability - No",
|
||||||
|
"egg": "Egg",
|
||||||
|
"eggPurchasable": "Purchasable Egg",
|
||||||
"pokerus": "Pokerus",
|
"pokerus": "Pokerus",
|
||||||
"hasPokerus": "Pokerus - Yes",
|
"hasPokerus": "Pokerus - Yes",
|
||||||
"noPokerus": "Pokerus - No",
|
"noPokerus": "Pokerus - No",
|
||||||
|
@ -97,5 +97,6 @@ export const settings: SimpleTranslationEntries = {
|
|||||||
"controller": "Controller",
|
"controller": "Controller",
|
||||||
"gamepadSupport": "Supporto Gamepad",
|
"gamepadSupport": "Supporto Gamepad",
|
||||||
"showBgmBar": "Mostra Nomi Musica",
|
"showBgmBar": "Mostra Nomi Musica",
|
||||||
|
"moveTouchControls": "Move Touch Controls",
|
||||||
"shopOverlayOpacity": "Opacità Finestra Negozio"
|
"shopOverlayOpacity": "Opacità Finestra Negozio"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -1,53 +1,53 @@
|
|||||||
import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
||||||
|
|
||||||
export const arenaTag: SimpleTranslationEntries = {
|
export const arenaTag: SimpleTranslationEntries = {
|
||||||
"yourTeam": "your team",
|
"yourTeam": "味方",
|
||||||
"opposingTeam": "the opposing team",
|
"opposingTeam": "相手",
|
||||||
"arenaOnRemove": "{{moveName}}'s effect wore off.",
|
"arenaOnRemove": "{{moveName}}の 効果が 切れた",
|
||||||
"arenaOnRemovePlayer": "{{moveName}}'s effect wore off\non your side.",
|
"arenaOnRemovePlayer": "{{moveName}}の 効果が\n味方から 切れた",
|
||||||
"arenaOnRemoveEnemy": "{{moveName}}'s effect wore off\non the foe's side.",
|
"arenaOnRemoveEnemy": "{{moveName}}の 効果が\n相手から 切れた",
|
||||||
"mistOnAdd": "{{pokemonNameWithAffix}}'s team became\nshrouded in mist!",
|
"mistOnAdd": "{{pokemonNameWithAffix}}の 味方は\n白い霧に 包まれた!",
|
||||||
"mistApply": "The mist prevented\nthe lowering of stats!",
|
"mistApply": "白い霧が\n能力変化の 削減から 守った!",
|
||||||
"reflectOnAdd": "Reflect reduced the damage of physical moves.",
|
"reflectOnAdd": "リフレクターで 物理ダメージを さげた",
|
||||||
"reflectOnAddPlayer": "Reflect reduced the damage of physical moves on your side.",
|
"reflectOnAddPlayer": "味方の リフレクターで\n物理ダメージを さげた",
|
||||||
"reflectOnAddEnemy": "Reflect reduced the damage of physical moves on the foe's side.",
|
"reflectOnAddEnemy": "相手の リフレクターで\n物理ダメージを さげた",
|
||||||
"lightScreenOnAdd": "Light Screen reduced the damage of special moves.",
|
"lightScreenOnAdd": "ひかりのかべで\n物理ダメージを さげた",
|
||||||
"lightScreenOnAddPlayer": "Light Screen reduced the damage of special moves on your side.",
|
"lightScreenOnAddPlayer": "味方の ひかりのかべで\n物理ダメージを さげた",
|
||||||
"lightScreenOnAddEnemy": "Light Screen reduced the damage of special moves on the foe's side.",
|
"lightScreenOnAddEnemy": "相手の ひかりのかべで\n物理ダメージを さげた",
|
||||||
"auroraVeilOnAdd": "Aurora Veil reduced the damage of moves.",
|
"auroraVeilOnAdd": "オーロラベールで\n攻撃の ダメージを さげた",
|
||||||
"auroraVeilOnAddPlayer": "Aurora Veil reduced the damage of moves on your side.",
|
"auroraVeilOnAddPlayer": "味方の オーロラベールで\n攻撃ダメージを さげた",
|
||||||
"auroraVeilOnAddEnemy": "Aurora Veil reduced the damage of moves on the foe's side.",
|
"auroraVeilOnAddEnemy": "相手の オーロラベールで\n攻撃ダメージを さげた",
|
||||||
"conditionalProtectOnAdd": "{{moveName}} protected team!",
|
"conditionalProtectOnAdd": "{{moveName}}に 守られた!",
|
||||||
"conditionalProtectOnAddPlayer": "{{moveName}} protected your team!",
|
"conditionalProtectOnAddPlayer": "見方が {{moveName}}に 守られた!",
|
||||||
"conditionalProtectOnAddEnemy": "{{moveName}} protected the\nopposing team!",
|
"conditionalProtectOnAddEnemy": "相手が {{moveName}}に 守られた!",
|
||||||
"conditionalProtectApply": "{{moveName}} protected {{pokemonNameWithAffix}}!",
|
"conditionalProtectApply": "{{pokemonNameWithAffix}}が\n{{moveName}}に 守られた!",
|
||||||
"matBlockOnAdd": "{{pokemonNameWithAffix}} intends to flip up a mat\nand block incoming attacks!",
|
"matBlockOnAdd": "{{pokemonNameWithAffix}}は\nたたみがえしを ねらっている!",
|
||||||
"noCritOnAddPlayer": "The {{moveName}} shielded your\nteam from critical hits!",
|
"noCritOnAddPlayer": "{{moveName}}の 力で 味方の急所が 隠れた!",
|
||||||
"noCritOnAddEnemy": "The {{moveName}} shielded the opposing\nteam from critical hits!",
|
"noCritOnAddEnemy": "{{moveName}}の 力で 相手の急所が 隠れた!",
|
||||||
"noCritOnRemove": "{{pokemonNameWithAffix}}'s {{moveName}}\nwore off!",
|
"noCritOnRemove": "{{pokemonNameWithAffix}}の {{moveName}}の\n効果が なくなった!",
|
||||||
"wishTagOnAdd": "{{pokemonNameWithAffix}}'s wish\ncame true!",
|
"wishTagOnAdd": "{{pokemonNameWithAffix}}の\nねがいごとが かなった!",
|
||||||
"mudSportOnAdd": "Electricity's power was weakened!",
|
"mudSportOnAdd": "電気の威力が 弱まった!",
|
||||||
"mudSportOnRemove": "The effects of Mud Sport\nhave faded.",
|
"mudSportOnRemove": "どろあそびの 効果が なくなった!",
|
||||||
"waterSportOnAdd": "Fire's power was weakened!",
|
"waterSportOnAdd": "炎の威力が 弱まった!",
|
||||||
"waterSportOnRemove": "The effects of Water Sport\nhave faded.",
|
"waterSportOnRemove": "みずあそびの 効果が なくなった!",
|
||||||
"spikesOnAdd": "{{moveName}} were scattered\nall around {{opponentDesc}}'s feet!",
|
"spikesOnAdd": "{{opponentDesc}}の 足下に\n{{moveName}}が 散らばった!",
|
||||||
"spikesActivateTrap": "{{pokemonNameWithAffix}} is hurt\nby the spikes!",
|
"spikesActivateTrap": "{{pokemonNameWithAffix}}は\nまきびしの ダメージを 受けた!",
|
||||||
"toxicSpikesOnAdd": "{{moveName}} were scattered\nall around {{opponentDesc}}'s feet!",
|
"toxicSpikesOnAdd": "{{opponentDesc}}の 足下に\n{{moveName}}が 散らばった!",
|
||||||
"toxicSpikesActivateTrapPoison": "{{pokemonNameWithAffix}} absorbed the {{moveName}}!",
|
"toxicSpikesActivateTrapPoison": "{{pokemonNameWithAffix}}は {{moveName}}を 吸収した!",
|
||||||
"stealthRockOnAdd": "Pointed stones float in the air\naround {{opponentDesc}}!",
|
"stealthRockOnAdd": "{{opponentDesc}}の 周りに\nとがった岩が ただよい始めた!",
|
||||||
"stealthRockActivateTrap": "Pointed stones dug into\n{{pokemonNameWithAffix}}!",
|
"stealthRockActivateTrap": "{{pokemonNameWithAffix}}に\nとがった岩が 食い込んだ!",
|
||||||
"stickyWebOnAdd": "A {{moveName}} has been laid out on the ground around the opposing team!",
|
"stickyWebOnAdd": "相手の 足下に\n{{moveName}}が 広がった!",
|
||||||
"stickyWebActivateTrap": "The opposing {{pokemonName}} was caught in a sticky web!",
|
"stickyWebActivateTrap": "相手の {{pokemonName}}は\nねばねばネットに ひっかかった!",
|
||||||
"trickRoomOnAdd": "{{pokemonNameWithAffix}} twisted\nthe dimensions!",
|
"trickRoomOnAdd": "{{pokemonNameWithAffix}}は\n時空を ゆがめた!",
|
||||||
"trickRoomOnRemove": "The twisted dimensions\nreturned to normal!",
|
"trickRoomOnRemove": "ゆがんだ 時空が 元に戻った!",
|
||||||
"gravityOnAdd": "Gravity intensified!",
|
"gravityOnAdd": "じゅうりょくが 強くなった!",
|
||||||
"gravityOnRemove": "Gravity returned to normal!",
|
"gravityOnRemove": "じゅうりょくが 元に戻った!",
|
||||||
"tailwindOnAdd": "The Tailwind blew from behind team!",
|
"tailwindOnAdd": "追い風が 吹き始めた!",
|
||||||
"tailwindOnAddPlayer": "The Tailwind blew from behind\nyour team!",
|
"tailwindOnAddPlayer": "味方に\n追い風が 吹き始めた!",
|
||||||
"tailwindOnAddEnemy": "The Tailwind blew from behind\nthe opposing team!",
|
"tailwindOnAddEnemy": "相手に\n追い風が 吹き始めた!",
|
||||||
"tailwindOnRemove": "Team's Tailwind petered out!",
|
"tailwindOnRemove": "追い風が 止んだ!",
|
||||||
"tailwindOnRemovePlayer": "Your team's Tailwind petered out!",
|
"tailwindOnRemovePlayer": "味方の 追い風が 止んだ!",
|
||||||
"tailwindOnRemoveEnemy": "The opposing team's Tailwind petered out!",
|
"tailwindOnRemoveEnemy": "相手の 追い風が 止んだ!",
|
||||||
"happyHourOnAdd": "Everyone is caught up in the happy atmosphere!",
|
"happyHourOnAdd": "みんなが ハッピーな気分に\n包まれた!",
|
||||||
"happyHourOnRemove": "The atmosphere returned to normal.",
|
"happyHourOnRemove": "みんなの 気分が 元に戻った",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -95,65 +95,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"congratulations": "おめでとうございます!!",
|
"congratulations": "おめでとうございます!!",
|
||||||
"beatModeFirstTime": "初めて {{speciesName}}が {{gameMode}}モードを クリアした!\n{{newModifier}}を 手に入れた!",
|
"beatModeFirstTime": "初めて {{speciesName}}が {{gameMode}}モードを クリアした!\n{{newModifier}}を 手に入れた!",
|
||||||
"ppReduced": "{{targetName}}の {{moveName}}を {{reduction}}削った!",
|
"ppReduced": "{{targetName}}の {{moveName}}を {{reduction}}削った!",
|
||||||
"battlerTagsRechargingLapse": "{{pokemonNameWithAffix}}は 攻撃の 反動で 動けない!",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}は もう 逃げられない!",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}}は\n{{moveName}}の 効果が 解けた!",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}}は ひるんで 技が出せない!",
|
|
||||||
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}}は 混乱 した!",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}}の 混乱が 解けた!",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}}は すでに 混乱している!",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}}は 混乱している!",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "わけも わからず 自分を 攻撃した!",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}}を みちづれに できない!",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}}は 相手を みちづれに した!",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に メロメロに なった!",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}}は すでに メロメロだ!",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に メロメロだ!",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}}は\nメロメロで わざが 出せなかった!",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}}は メロメロ状態が 治った!",
|
|
||||||
"battlerTagsSeededOnAdd": "{{pokemonNameWithAffix}}に 種を 植(う)えつけた!",
|
|
||||||
"battlerTagsSeededLapse": "やどりぎが {{pokemonNameWithAffix}}の 体力を うばう!",
|
|
||||||
"battlerTagsSeededLapseShed": "{{pokemonNameWithAffix}}は ヘドロえきを 吸い取った!",
|
|
||||||
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}}は あくむを 見始めた!",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}}は すでに うなされている!",
|
|
||||||
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}}は あくむに うなされている!",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}}は アンコールを 受けた!",
|
|
||||||
"battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}}の アンコール状態が 解けた!",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}}は {{pokemonName}}を\nてだすけする 体制に 入った!",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}}は 根から\n養分(ようぶん)を 吸い取った!",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}}は 根を 張った!",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}}は 水のリングを まとった!",
|
|
||||||
"battlerTagsAquaRingLapse": "{{pokemonName}}は {{moveName}}で\n体力を 回復した!",
|
|
||||||
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}} の ねむけを 誘(さそ)った!",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}}は {{moveName}}の ダメージを 受けた!",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に 締め付けられた!",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に 巻き付かれた!",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}}は 渦(うず)の中に 閉じ込められた!",
|
|
||||||
"battlerTagsClampOnTrap": "{{pokemonName}}は {{sourcePokemonNameWithAffix}}の\nからに 挟まれた!",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}}は {{moveName}}に 捕らわれた!",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}}は マグマの\n 渦(うず)に 閉じ込められた!",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}}は トラバサミに 捕らわれた!",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}}は {{pokemonNameWithAffix}}に 閉じ込められた!",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}}は {{sourcePokemonNameWithAffix}}に まとわりつかれた!",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}は\nまもりの 体制に 入った!",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}は\n攻撃から 身を守った!",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}}は\nこらえる 体制に 入った!",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}は\n攻撃を こらえた!",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}は\n攻撃を こらえた!",
|
|
||||||
"battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}の ほろびのカウントが {{turnCount}}になった!",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}}は 注目の 的になった!",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}}は 怠(なま)けている!",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}は 調子が 上がらない!",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}は 調子を 取り戻した!",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}の {{statName}}が\n上がっている 状態に なった!",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "{{pokemonNameWithAffix}}の {{abilityName}}の 効果が なくなった!",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}}は 電磁力(でんじりょく)で 浮かび上がった!",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}は 電磁力(でんじりょく)が なくなった!",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}は 張り切っている!",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}}は 落ち着いた。",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}}は しおづけに なった!",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}}は {{moveName}}の\n ダメージを 受けている",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}は 自分の 体力を 削って\n{{pokemonName}}に のろいを かけた!",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}}は のろわれている!",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}}は {{stockpiledCount}}つ たくわえた!"
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "nightmares",
|
"nightmareDesc": "nightmares",
|
||||||
"ingrainDesc": "roots",
|
"ingrainDesc": "roots",
|
||||||
"drowsyDesc": "drowsiness",
|
"drowsyDesc": "drowsiness",
|
||||||
|
"rechargingLapse": "{{pokemonNameWithAffix}}は 攻撃の 反動で 動けない!",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}}は もう 逃げられない!",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}}は\n{{moveName}}の 効果が 解けた!",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}}は ひるんで 技が出せない!",
|
||||||
|
"confusedOnAdd": "{{pokemonNameWithAffix}}は 混乱 した!",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}}の 混乱が 解けた!",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}}は すでに 混乱している!",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}}は 混乱している!",
|
||||||
|
"confusedLapseHurtItself": "わけも わからず 自分を 攻撃した!",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}}を みちづれに できない!",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}}は 相手を みちづれに した!",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に メロメロに なった!",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}}は すでに メロメロだ!",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に メロメロだ!",
|
||||||
|
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}}は\nメロメロで わざが 出せなかった!",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}}は メロメロ状態が 治った!",
|
||||||
|
"seededOnAdd": "{{pokemonNameWithAffix}}に 種を 植(う)えつけた!",
|
||||||
|
"seededLapse": "やどりぎが {{pokemonNameWithAffix}}の 体力を うばう!",
|
||||||
|
"seededLapseShed": "{{pokemonNameWithAffix}}は ヘドロえきを 吸い取った!",
|
||||||
|
"nightmareOnAdd": "{{pokemonNameWithAffix}}は あくむを 見始めた!",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}}は すでに うなされている!",
|
||||||
|
"nightmareLapse": "{{pokemonNameWithAffix}}は あくむに うなされている!",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}}は アンコールを 受けた!",
|
||||||
|
"encoreOnRemove": "{{pokemonNameWithAffix}}の アンコール状態が 解けた!",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}}は {{pokemonName}}を\nてだすけする 体制に 入った!",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}}は 根から\n養分(ようぶん)を 吸い取った!",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}}は 根を 張った!",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}}は 水のリングを まとった!",
|
||||||
|
"aquaRingLapse": "{{pokemonName}}は {{moveName}}で\n体力を 回復した!",
|
||||||
|
"drowsyOnAdd": "{{pokemonNameWithAffix}} の ねむけを 誘(さそ)った!",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}}は {{moveName}}の ダメージを 受けた!",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に 締め付けられた!",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}}は {{sourcePokemonName}}に 巻き付かれた!",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}}は 渦(うず)の中に 閉じ込められた!",
|
||||||
|
"clampOnTrap": "{{pokemonName}}は {{sourcePokemonNameWithAffix}}の\nからに 挟まれた!",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}}は {{moveName}}に 捕らわれた!",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}}は マグマの\n 渦(うず)に 閉じ込められた!",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}}は トラバサミに 捕らわれた!",
|
||||||
|
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}}は {{pokemonNameWithAffix}}に 閉じ込められた!",
|
||||||
|
"infestationOnTrap": "{{pokemonNameWithAffix}}は {{sourcePokemonNameWithAffix}}に まとわりつかれた!",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}}は\nまもりの 体制に 入った!",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}}は\n攻撃から 身を守った!",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}}は\nこらえる 体制に 入った!",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}}は\n攻撃を こらえた!",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}}は\n攻撃を こらえた!",
|
||||||
|
"perishSongLapse": "{{pokemonNameWithAffix}}の ほろびのカウントが {{turnCount}}になった!",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}}は 注目の 的になった!",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}}は 怠(なま)けている!",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}}は 調子が 上がらない!",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}}は 調子を 取り戻した!",
|
||||||
|
"highestStatBoostOnAdd": "{{pokemonNameWithAffix}}の {{statName}}が\n上がっている 状態に なった!",
|
||||||
|
"highestStatBoostOnRemove": "{{pokemonNameWithAffix}}の {{abilityName}}の 効果が なくなった!",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}}は 電磁力(でんじりょく)で 浮かび上がった!",
|
||||||
|
"magnetRisenOnRemove": "{{pokemonNameWithAffix}}は 電磁力(でんじりょく)が なくなった!",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}}は 張り切っている!",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}}は 落ち着いた。",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}}は しおづけに なった!",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}}は {{moveName}}の\n ダメージを 受けている",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}}は 自分の 体力を 削って\n{{pokemonName}}に のろいを かけた!",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}}は のろわれている!",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}}は {{stockpiledCount}}つ たくわえた!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -11,11 +11,13 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"normal": "Not Shiny",
|
"normal": "Not Shiny",
|
||||||
"uncaught": "Uncaught",
|
"uncaught": "Uncaught",
|
||||||
"passive": "Passive",
|
"passive": "Passive",
|
||||||
"passiveUnlocked": "Passive Unlocked",
|
"passiveUnlocked": "Passive - Yes",
|
||||||
"passiveLocked": "Passive Locked",
|
"passiveLocked": "Passive - No",
|
||||||
|
"passiveUnlockable": "Passive - Can Unlock",
|
||||||
"costReduction": "Cost Reduction",
|
"costReduction": "Cost Reduction",
|
||||||
"costReductionUnlocked": "Cost Reduction Unlocked",
|
"costReductionUnlocked": "Cost Reduction - Yes",
|
||||||
"costReductionLocked": "Cost Reduction Locked",
|
"costReductionLocked": "Cost Reduction - No",
|
||||||
|
"costReductionUnlockable": "Cost Reduction - Can Unlock",
|
||||||
"favorite": "Favorite",
|
"favorite": "Favorite",
|
||||||
"isFavorite": "Favorite - Yes",
|
"isFavorite": "Favorite - Yes",
|
||||||
"notFavorite": "Favorite - No",
|
"notFavorite": "Favorite - No",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "Hidden Ability",
|
"hiddenAbility": "Hidden Ability",
|
||||||
"hasHiddenAbility": "Hidden Ability - Yes",
|
"hasHiddenAbility": "Hidden Ability - Yes",
|
||||||
"noHiddenAbility": "Hidden Ability - No",
|
"noHiddenAbility": "Hidden Ability - No",
|
||||||
|
"egg": "Egg",
|
||||||
|
"eggPurchasable": "Purchasable Egg",
|
||||||
"pokerus": "Pokerus",
|
"pokerus": "Pokerus",
|
||||||
"hasPokerus": "Pokerus - Yes",
|
"hasPokerus": "Pokerus - Yes",
|
||||||
"noPokerus": "Pokerus - No",
|
"noPokerus": "Pokerus - No",
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
||||||
|
|
||||||
export const modifier: SimpleTranslationEntries = {
|
export const modifier: SimpleTranslationEntries = {
|
||||||
"surviveDamageApply": "{{pokemonNameWithAffix}} hung on\nusing its {{typeName}}!",
|
"surviveDamageApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で もちこたえた!",
|
||||||
"turnHealApply": "{{pokemonNameWithAffix}} restored a little HP using\nits {{typeName}}!",
|
"turnHealApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 少し 回復!",
|
||||||
"hitHealApply": "{{pokemonNameWithAffix}} restored a little HP using\nits {{typeName}}!",
|
"hitHealApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 少し 回復!",
|
||||||
"pokemonInstantReviveApply": "{{pokemonNameWithAffix}} was revived\nby its {{typeName}}!",
|
"pokemonInstantReviveApply": "{{pokemonNameWithAffix}}は\n{{typeName}}で 復活した!",
|
||||||
"pokemonResetNegativeStatStageApply": "{{pokemonNameWithAffix}}'s lowered stats were restored\nby its {{typeName}}!",
|
"pokemonResetNegativeStatStageApply": "{{pokemonNameWithAffix}}は {{typeName}}で\n下がった能力が 元に戻った!",
|
||||||
"moneyInterestApply": "You received interest of ₽{{moneyAmount}}\nfrom the {{typeName}}!",
|
"moneyInterestApply": "{{typeName}}から {{moneyAmount}}円 取得した!",
|
||||||
"turnHeldItemTransferApply": "{{pokemonNameWithAffix}}'s {{itemName}} was absorbed\nby {{pokemonName}}'s {{typeName}}!",
|
"turnHeldItemTransferApply": "{{pokemonName}}の {{typeName}}が\n{{pokemonNameWithAffix}}の {{itemName}}を 吸い取った!",
|
||||||
"contactHeldItemTransferApply": "{{pokemonNameWithAffix}}'s {{itemName}} was snatched\nby {{pokemonName}}'s {{typeName}}!",
|
"contactHeldItemTransferApply": "{{pokemonName}}の {{typeName}}が\n{{pokemonNameWithAffix}}の {{itemName}}を うばい取った!",
|
||||||
"enemyTurnHealApply": "{{pokemonNameWithAffix}}\nrestored some HP!",
|
"enemyTurnHealApply": "{{pokemonNameWithAffix}}は\n体力を 回復!",
|
||||||
"bypassSpeedChanceApply": "{{pokemonName}} can act faster than normal, thanks to its {{itemName}}!",
|
"bypassSpeedChanceApply": "{{pokemonName}}は {{itemName}}で\n行動が はやくなった!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
||||||
|
|
||||||
export const saveSlotSelectUiHandler: SimpleTranslationEntries = {
|
export const saveSlotSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"overwriteData": "せんたくしたスロットにデータをうわがきしますか?",
|
"overwriteData": "選択した スロットに データを 上書きします?",
|
||||||
"loading": "ローディング...",
|
"loading": "読込中…",
|
||||||
"wave": "Wave",
|
"wave": "波",//This needs to be preceded by 第[x],e.g.第1波、第248波
|
||||||
"lv": "Lv",
|
"lv": "Lv",
|
||||||
"empty": "なし",
|
"empty": "なし",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -6,46 +6,46 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
* account interactions, descriptive text, etc.
|
* account interactions, descriptive text, etc.
|
||||||
*/
|
*/
|
||||||
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
export const starterSelectUiHandler: SimpleTranslationEntries = {
|
||||||
"confirmStartTeam": "この じょうけんで チャレンジを しんこうしますか?",
|
"confirmStartTeam": "この条件で チャレンジを 始めますか?",
|
||||||
"confirmExit": "しゅうりょう しますか?",
|
"confirmExit": "終了しますか?",
|
||||||
"invalidParty": "This is not a valid starting party!",
|
"invalidParty": "手持ちは チャレンジの 条件で 認められない!",
|
||||||
"gen1": "1せだい",
|
"gen1": "1世代",
|
||||||
"gen2": "2せだい",
|
"gen2": "2世代",
|
||||||
"gen3": "3せだい",
|
"gen3": "3世代",
|
||||||
"gen4": "4せだい",
|
"gen4": "4世代",
|
||||||
"gen5": "5せだい",
|
"gen5": "5世代",
|
||||||
"gen6": "6せだい",
|
"gen6": "6世代",
|
||||||
"gen7": "7せだい",
|
"gen7": "7世代",
|
||||||
"gen8": "8せだい",
|
"gen8": "8世代",
|
||||||
"gen9": "9せだい",
|
"gen9": "9世代",
|
||||||
"growthRate": "EXPタイプ:",
|
"growthRate": "経験値タイプ:",
|
||||||
"ability": "とくせい:",
|
"ability": "特性:",
|
||||||
"passive": "パッシブ:",
|
"passive": "パッシブ:",
|
||||||
"nature": "せいかく:",
|
"nature": "性格:",
|
||||||
"eggMoves": "タマゴわざ",
|
"eggMoves": "タマゴ技",
|
||||||
"start": "始める",
|
"start": "始める",
|
||||||
"addToParty": "えらぶ",
|
"addToParty": "手持ちに入れる",
|
||||||
"toggleIVs": "個体値を ひょうじ",
|
"toggleIVs": "個体値を表示",
|
||||||
"manageMoves": "わざを ならびかえ",
|
"manageMoves": "技を並び替える",
|
||||||
"manageNature": "せいかくを ならびかえ",
|
"manageNature": "性格を変える",
|
||||||
"addToFavorites": "Add to Favorites",
|
"addToFavorites": "お気に入りにする",
|
||||||
"removeFromFavorites": "Remove from Favorites",
|
"removeFromFavorites": "お気に入りから除く",
|
||||||
"useCandies": "アメを つかう",
|
"useCandies": "飴を使う",
|
||||||
"selectNature": "せいかくをえらんでください",
|
"selectNature": "性格を選んでください。",
|
||||||
"selectMoveSwapOut": "交換する技を選択してください",
|
"selectMoveSwapOut": "入れ替えたい技を選んでください。",
|
||||||
"selectMoveSwapWith": "交換先の技を選択してください",
|
"selectMoveSwapWith": "他の技と交換してください。",
|
||||||
"unlockPassive": "パッシブを かいほうする",
|
"unlockPassive": "パッシブを開放",
|
||||||
"reduceCost": "ポケモンの 必要ポイントを へらす",
|
"reduceCost": "ポイントを減らす",
|
||||||
"sameSpeciesEgg": "Buy an Egg",
|
"sameSpeciesEgg": "タマゴを買う",
|
||||||
"cycleShiny": ": 色違い変更",
|
"cycleShiny": ": 色違い変更",
|
||||||
"cycleForm": ": フォルム変更",
|
"cycleForm": ": フォルム変更",
|
||||||
"cycleGender": ": 性別変更",
|
"cycleGender": ": 性別変更",
|
||||||
"cycleAbility": ": 特性変更",
|
"cycleAbility": ": 特性変更",
|
||||||
"cycleNature": ": 性格変更",
|
"cycleNature": ": 性格変更",
|
||||||
"cycleVariant": ": 色変更",
|
"cycleVariant": ": 色変更",
|
||||||
"enablePassive": "パッシブ ゆうこう",
|
"enablePassive": "パッシブ - オン",
|
||||||
"disablePassive": "パッシブ むこう",
|
"disablePassive": "パッシブ - オフ",
|
||||||
"locked": "Locked",
|
"locked": "開放されていない",
|
||||||
"disabled": "Disabled",
|
"disabled": "無効",
|
||||||
"uncaught": "Uncaught"
|
"uncaught": "捕まっていない"
|
||||||
};
|
};
|
||||||
|
@ -2,10 +2,10 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
|
|||||||
|
|
||||||
export const voucher: SimpleTranslationEntries = {
|
export const voucher: SimpleTranslationEntries = {
|
||||||
"vouchers": "クーポン",
|
"vouchers": "クーポン",
|
||||||
"eggVoucher": "たまごクーポン",
|
"eggVoucher": "タマゴクーポン",
|
||||||
"eggVoucherPlus": "たまごクーポンプラス",
|
"eggVoucherPlus": "タマゴクーポン・プラス",
|
||||||
"eggVoucherPremium": "たまごクーポンプレミアム",
|
"eggVoucherPremium": "タマゴクーポン・プレミアム",
|
||||||
"eggVoucherGold": "たまごクーポンゴールド",
|
"eggVoucherGold": "タマゴクーポン・ゴールド",
|
||||||
"locked": "Locked",
|
"locked": "なし",
|
||||||
"defeatTrainer": "Defeat {{trainerName}}"
|
"defeatTrainer": "{{trainerName}}を 倒す"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -95,65 +95,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"congratulations": "축하합니다!",
|
"congratulations": "축하합니다!",
|
||||||
"beatModeFirstTime": "{{speciesName}}[[가]] {{gameMode}} 모드를 처음으로 클리어했다!\n{{newModifier}}[[를]] 손에 넣었다!",
|
"beatModeFirstTime": "{{speciesName}}[[가]] {{gameMode}} 모드를 처음으로 클리어했다!\n{{newModifier}}[[를]] 손에 넣었다!",
|
||||||
"ppReduced": "{{targetName}}의\n{{moveName}}[[를]] {{reduction}} 깎았다!",
|
"ppReduced": "{{targetName}}의\n{{moveName}}[[를]] {{reduction}} 깎았다!",
|
||||||
"battlerTagsRechargingLapse": "공격의 반동으로\n{{pokemonNameWithAffix}}[[는]] 움직일 수 없다!",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n이제 도망칠 수 없다!",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}}[[는]]\n{{moveName}}로부터 풀려났다!",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}}[[는]] 풀이 죽어\n움직일 수 없었다!",
|
|
||||||
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n혼란에 빠졌다!",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}}의\n혼란이 풀렸다!",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}}[[는]]\n이미 혼란에 빠져 있다",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}}[[는]]\n혼란에 빠져 있다!",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "영문도 모른채\n자신을 공격했다!",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}}[[는]]\n길동무의 영향을 받지 않는다.",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}}[[는]] {{pokemonNameWithAffix2}}[[를]]\n길동무로 삼았다!",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n헤롱헤롱해졌다!",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}}[[는]]\n이미 헤롱헤롱해있다!",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}}[[는]]\n{{sourcePokemonName}}에게 헤롱헤롱해 있다!",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}}[[는]] 헤롱헤롱해서\n기술을 쓸 수 없었다!",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}}[[는]]\n헤롱헤롱 상태에서 벗어났다.",
|
|
||||||
"battlerTagsSeededOnAdd": "{{pokemonNameWithAffix}}에게\n씨앗을 심었다!",
|
|
||||||
"battlerTagsSeededLapse": "씨뿌리기가 {{pokemonNameWithAffix}}의\n체력을 빼앗는다!",
|
|
||||||
"battlerTagsSeededLapseShed": "{{pokemonNameWithAffix}}[[는]]\n씨앗을 날려버렸다!",
|
|
||||||
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}}[[는]]\n악몽을 꾸기 시작했다!",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}}[[는]]\n이미 악몽을 꾸고 있다!",
|
|
||||||
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}}[[는]]\n악몽에 시달리고 있다!",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}}[[는]]\n앙코르를 받았다!",
|
|
||||||
"battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}}의\n앙코르 상태가 풀렸다!",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}}[[는]] {{pokemonName}}에게\n도우미가 되어주려 한다!",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}}[[는]] 뿌리로부터\n양분을 흡수했다!",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}}[[는]] 뿌리를 뻗었다!",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}}[[는]]\n물의 베일을 둘러썼다!",
|
|
||||||
"battlerTagsAquaRingLapse": "{{moveName}} 효과로\n{{pokemonName}}[[는]] HP를 회복했다!",
|
|
||||||
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}}의\n졸음을 유도했다!",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}}[[는]] {{moveName}}의\n데미지를 입고 있다!",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}}[[는]] {{sourcePokemonName}}에게\n{{moveName}}[[를]] 당했다!",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}}[[는]] {{sourcePokemonName}}에게\n휘감겼다!",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}}[[는]]\n소용돌이 속에 갇혔다!",
|
|
||||||
"battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}}[[는]] {{pokemonName}}의\n껍질에 꼈다!",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}}[[는]]\n{{moveName}}에 붙잡혔다!",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}}[[는]]\n마그마의 소용돌이에 갇혔다!",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}}[[는]]\n집게덫에 붙잡혔다!",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}}[[는]]\n{{pokemonNameWithAffix}}를 가두었다!",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}}[[는]]\n{{sourcePokemonNameWithAffix}}에게 엉겨 붙었다!",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n방어 태세에 들어갔다!",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}[[는]]\n공격으로부터 몸을 지켰다!",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}}[[는]]\n버티기 태세에 들어갔다!",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}[[는]]\n공격을 버텼다!",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}[[는]]\n공격을 버텼다!",
|
|
||||||
"battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}의 멸망의\n카운트가 {{turnCount}}[[가]] 되었다!",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}}[[는]]\n주목의 대상이 되었다!",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}}[[는]] 게으름을 피우고 있다!",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}[[는]] 컨디션이\n좋아지지 않는다!",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} 는 마침내\n컨디션을 회복했다!",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}의\n{{statName}}[[가]] 올라갔다!",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "{{pokemonNameWithAffix}}의\n{{abilityName}} 효과가 사라졌다!",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}}[[는]]\n전자력으로 떠올랐다!",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}의\n전자력이 없어졌다!",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}[[는]]\n의욕이 넘치고 있다!",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}}[[는]] 평소로 돌아왔다.",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}}[[는]]\n소금에 절여졌다!",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}}[[는]] 소금절이의\n데미지를 입고 있다.",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}[[는]] 자신의 체력을 깎아서\n{{pokemonName}}에게 저주를 걸었다!",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}}[[는]]\n저주받고 있다!",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}}[[는]]\n{{stockpiledCount}}개 비축했다!",
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "악몽",
|
"nightmareDesc": "악몽",
|
||||||
"ingrainDesc": "뿌리",
|
"ingrainDesc": "뿌리",
|
||||||
"drowsyDesc": "졸음",
|
"drowsyDesc": "졸음",
|
||||||
|
"rechargingLapse": "공격의 반동으로\n{{pokemonNameWithAffix}}[[는]] 움직일 수 없다!",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n이제 도망칠 수 없다!",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}}[[는]]\n{{moveName}}로부터 풀려났다!",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}}[[는]] 풀이 죽어\n움직일 수 없었다!",
|
||||||
|
"confusedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n혼란에 빠졌다!",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}}의\n혼란이 풀렸다!",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}}[[는]]\n이미 혼란에 빠져 있다",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}}[[는]]\n혼란에 빠져 있다!",
|
||||||
|
"confusedLapseHurtItself": "영문도 모른채\n자신을 공격했다!",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}}[[는]]\n길동무의 영향을 받지 않는다.",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}}[[는]] {{pokemonNameWithAffix2}}[[를]]\n길동무로 삼았다!",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n헤롱헤롱해졌다!",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}}[[는]]\n이미 헤롱헤롱해있다!",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}}[[는]]\n{{sourcePokemonName}}에게 헤롱헤롱해 있다!",
|
||||||
|
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}}[[는]] 헤롱헤롱해서\n기술을 쓸 수 없었다!",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}}[[는]]\n헤롱헤롱 상태에서 벗어났다.",
|
||||||
|
"seededOnAdd": "{{pokemonNameWithAffix}}에게\n씨앗을 심었다!",
|
||||||
|
"seededLapse": "씨뿌리기가 {{pokemonNameWithAffix}}의\n체력을 빼앗는다!",
|
||||||
|
"seededLapseShed": "{{pokemonNameWithAffix}}[[는]]\n씨앗을 날려버렸다!",
|
||||||
|
"nightmareOnAdd": "{{pokemonNameWithAffix}}[[는]]\n악몽을 꾸기 시작했다!",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}}[[는]]\n이미 악몽을 꾸고 있다!",
|
||||||
|
"nightmareLapse": "{{pokemonNameWithAffix}}[[는]]\n악몽에 시달리고 있다!",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}}[[는]]\n앙코르를 받았다!",
|
||||||
|
"encoreOnRemove": "{{pokemonNameWithAffix}}의\n앙코르 상태가 풀렸다!",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}}[[는]] {{pokemonName}}에게\n도우미가 되어주려 한다!",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}}[[는]] 뿌리로부터\n양분을 흡수했다!",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}}[[는]] 뿌리를 뻗었다!",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}}[[는]]\n물의 베일을 둘러썼다!",
|
||||||
|
"aquaRingLapse": "{{moveName}} 효과로\n{{pokemonName}}[[는]] HP를 회복했다!",
|
||||||
|
"drowsyOnAdd": "{{pokemonNameWithAffix}}의\n졸음을 유도했다!",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}}[[는]] {{moveName}}의\n데미지를 입고 있다!",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}}[[는]] {{sourcePokemonName}}에게\n{{moveName}}[[를]] 당했다!",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}}[[는]] {{sourcePokemonName}}에게\n휘감겼다!",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}}[[는]]\n소용돌이 속에 갇혔다!",
|
||||||
|
"clampOnTrap": "{{sourcePokemonNameWithAffix}}[[는]] {{pokemonName}}의\n껍질에 꼈다!",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}}[[는]]\n{{moveName}}에 붙잡혔다!",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}}[[는]]\n마그마의 소용돌이에 갇혔다!",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}}[[는]]\n집게덫에 붙잡혔다!",
|
||||||
|
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}}[[는]]\n{{pokemonNameWithAffix}}를 가두었다!",
|
||||||
|
"infestationOnTrap": "{{pokemonNameWithAffix}}[[는]]\n{{sourcePokemonNameWithAffix}}에게 엉겨 붙었다!",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n방어 태세에 들어갔다!",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}}[[는]]\n공격으로부터 몸을 지켰다!",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}}[[는]]\n버티기 태세에 들어갔다!",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}}[[는]]\n공격을 버텼다!",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}}[[는]]\n공격을 버텼다!",
|
||||||
|
"perishSongLapse": "{{pokemonNameWithAffix}}의 멸망의\n카운트가 {{turnCount}}[[가]] 되었다!",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}}[[는]]\n주목의 대상이 되었다!",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}}[[는]] 게으름을 피우고 있다!",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}}[[는]] 컨디션이\n좋아지지 않는다!",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}} 는 마침내\n컨디션을 회복했다!",
|
||||||
|
"highestStatBoostOnAdd": "{{pokemonNameWithAffix}}의\n{{statName}}[[가]] 올라갔다!",
|
||||||
|
"highestStatBoostOnRemove": "{{pokemonNameWithAffix}}의\n{{abilityName}} 효과가 사라졌다!",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}}[[는]]\n전자력으로 떠올랐다!",
|
||||||
|
"magnetRisenOnRemove": "{{pokemonNameWithAffix}}의\n전자력이 없어졌다!",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}}[[는]]\n의욕이 넘치고 있다!",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}}[[는]] 평소로 돌아왔다.",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}}[[는]]\n소금에 절여졌다!",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}}[[는]] 소금절이의\n데미지를 입고 있다.",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}}[[는]] 자신의 체력을 깎아서\n{{pokemonName}}에게 저주를 걸었다!",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}}[[는]]\n저주받고 있다!",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}}[[는]]\n{{stockpiledCount}}개 비축했다!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -13,9 +13,11 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"passive": "패시브",
|
"passive": "패시브",
|
||||||
"passiveUnlocked": "패시브 해금",
|
"passiveUnlocked": "패시브 해금",
|
||||||
"passiveLocked": "패시브 잠김",
|
"passiveLocked": "패시브 잠김",
|
||||||
|
"passiveUnlockable": "패시브 해금 가능",
|
||||||
"costReduction": "코스트 감소",
|
"costReduction": "코스트 감소",
|
||||||
"costReductionUnlocked": "코스트 감소됨",
|
"costReductionUnlocked": "코스트 감소됨",
|
||||||
"costReductionLocked": "코스트 감소 없음",
|
"costReductionLocked": "코스트 감소 없음",
|
||||||
|
"costReductionUnlockable": "코스트 감소 가능",
|
||||||
"favorite": "즐겨찾기",
|
"favorite": "즐겨찾기",
|
||||||
"isFavorite": "즐겨찾기 등록됨",
|
"isFavorite": "즐겨찾기 등록됨",
|
||||||
"notFavorite": "즐겨찾기 제외됨",
|
"notFavorite": "즐겨찾기 제외됨",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "숨겨진 특성",
|
"hiddenAbility": "숨겨진 특성",
|
||||||
"hasHiddenAbility": "숨겨진 특성 보유",
|
"hasHiddenAbility": "숨겨진 특성 보유",
|
||||||
"noHiddenAbility": "숨겨진 특성 없음",
|
"noHiddenAbility": "숨겨진 특성 없음",
|
||||||
|
"egg": "알",
|
||||||
|
"eggPurchasable": "알 구매 가능",
|
||||||
"pokerus": "포켓러스",
|
"pokerus": "포켓러스",
|
||||||
"hasPokerus": "포켓러스 감염",
|
"hasPokerus": "포켓러스 감염",
|
||||||
"noPokerus": "포켓러스 없음",
|
"noPokerus": "포켓러스 없음",
|
||||||
|
@ -97,5 +97,6 @@ export const settings: SimpleTranslationEntries = {
|
|||||||
"controller": "컨트롤러",
|
"controller": "컨트롤러",
|
||||||
"gamepadSupport": "게임패드 지원",
|
"gamepadSupport": "게임패드 지원",
|
||||||
"showBgmBar": "BGM 제목 보여주기",
|
"showBgmBar": "BGM 제목 보여주기",
|
||||||
|
"moveTouchControls": "터치 컨트롤 이동",
|
||||||
"shopOverlayOpacity": "상점 오버레이 투명도"
|
"shopOverlayOpacity": "상점 오버레이 투명도"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -95,65 +95,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"unlockedSomething": "{{unlockedThing}}\nfoi desbloqueado.",
|
"unlockedSomething": "{{unlockedThing}}\nfoi desbloqueado.",
|
||||||
"congratulations": "Parabéns!",
|
"congratulations": "Parabéns!",
|
||||||
"beatModeFirstTime": "{{speciesName}} venceu o Modo {{gameMode}} pela primeira vez!\nVocê recebeu {{newModifier}}!",
|
"beatModeFirstTime": "{{speciesName}} venceu o Modo {{gameMode}} pela primeira vez!\nVocê recebeu {{newModifier}}!",
|
||||||
"battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} precisa\nrecarregar!",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} não pode\nmais escapar!",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} foi liberto\nde {{moveName}}!",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}} hesitou!",
|
|
||||||
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}} ficou\nconfuso!",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}} saiu\nde sua confusão!",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}} já\nestá confuso!",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}} está\nconfuso!",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "Se machucou em sua\nconfusão!",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}} não é afetado\npelos efeitos de Destiny Bond.",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}} levou\n{{pokemonNameWithAffix2}} junto com ele!",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}} se apaixonou\npor {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}} já\nestá apaixonado!",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}} está apaixonado\npor {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}} está\nimobilizado pelo amor!",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}} superou\nsua paixão.",
|
|
||||||
"battlerTagsSeededOnAdd": "{{pokemonNameWithAffix}} foi semeado!",
|
|
||||||
"battlerTagsSeededLapse": "A saúde de {{pokemonNameWithAffix}}\nfoi sugada pelo Leech Seed!",
|
|
||||||
"battlerTagsSeededLapseShed": "O Leech Seed de{{pokemonNameWithAffix}}\nsugou todo o gotejamento!",
|
|
||||||
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}} começou\na ter um Nightmare!",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}} já\nestá preso em um Nightmare!",
|
|
||||||
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}} está preso\nem um Nightmare!",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}} ganhou\num Encore!",
|
|
||||||
"battlerTagsEncoreOnRemove": "O Encore de {{pokemonNameWithAffix}}\nacabou!",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}} está pronto para\najudar {{pokemonName}}!",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}} absorveu\nnutrientes com suas raízes!",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}} plantou suas raízes!",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}} se cercou\ncom um véu de água!",
|
|
||||||
"battlerTagsAquaRingLapse": "{{moveName}} restaurou\nPS de {{pokemonName}}!",
|
|
||||||
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}} ficou com sono!",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}} foi ferido\npelo {{moveName}}!",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}} foi espremido\npelo {{moveName}} de {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}} foi enrolado\npor {{sourcePokemonName}}!",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}} ficou preso\nno vórtice!",
|
|
||||||
"battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}} prendeu\n{{pokemonName}}!",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}} foi preso\npor {{moveName}}!",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}} foi preso\npor um redemoinho de magma!",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}} foi preso\npor uma armadilha!",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}} prendeu\n{{pokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}} foi ferido por \numa infestação de {{sourcePokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}\nse protegeu!",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}\nse protegeu!",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}} está\npreparado!",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} suportou\no golpe!",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} suportou\no golpe!",
|
|
||||||
"battlerTagsPerishSongLapse": "O tempo restante de {{pokemonNameWithAffix}} diminuiu para {{turnCount}}.",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} virou o centro\ndas atenções!",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}} está\nviajando na maionese!",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} não\nestá preparado!",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} finalmente\nconseguiu se recompor!",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "O atributo de {{statName}} de\n{{pokemonNameWithAffix}} aumentou!",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "Os efeitos do {{abilityName}} de\n{{pokemonNameWithAffix}} acabaram!",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} levitou com eletromagnetismo!",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "O eletromagnetismo de {{pokemonNameWithAffix}} sumiu!",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} está ficando\nbombado!",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} relaxou.",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} está sendo curado com sal!",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} foi ferido pelo {{moveName}}!",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}} cortou seus PS pela metade e amaldiçoou {{pokemonName}}!",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}} foi ferido pelo Curse!",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}} estocou {{stockpiledCount}}!",
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "os pesadelos",
|
"nightmareDesc": "os pesadelos",
|
||||||
"ingrainDesc": "o enraizamento",
|
"ingrainDesc": "o enraizamento",
|
||||||
"drowsyDesc": "a sonolência",
|
"drowsyDesc": "a sonolência",
|
||||||
|
"rechargingLapse": "{{pokemonNameWithAffix}} precisa\nrecarregar!",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}} não pode\nmais escapar!",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}} foi liberto\nde {{moveName}}!",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}} hesitou!",
|
||||||
|
"confusedOnAdd": "{{pokemonNameWithAffix}} ficou\nconfuso!",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}} saiu\nde sua confusão!",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}} já\nestá confuso!",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}} está\nconfuso!",
|
||||||
|
"confusedLapseHurtItself": "Se machucou em sua\nconfusão!",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}} não é afetado\npelos efeitos de Destiny Bond.",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}} levou\n{{pokemonNameWithAffix2}} junto com ele!",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}} se apaixonou\npor {{sourcePokemonName}}!",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}} já\nestá apaixonado!",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}} está apaixonado\npor {{sourcePokemonName}}!",
|
||||||
|
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}} está\nimobilizado pelo amor!",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}} superou\nsua paixão.",
|
||||||
|
"seededOnAdd": "{{pokemonNameWithAffix}} foi semeado!",
|
||||||
|
"seededLapse": "A saúde de {{pokemonNameWithAffix}}\nfoi sugada pelo Leech Seed!",
|
||||||
|
"seededLapseShed": "O Leech Seed de{{pokemonNameWithAffix}}\nsugou todo o gotejamento!",
|
||||||
|
"nightmareOnAdd": "{{pokemonNameWithAffix}} começou\na ter um Nightmare!",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}} já\nestá preso em um Nightmare!",
|
||||||
|
"nightmareLapse": "{{pokemonNameWithAffix}} está preso\nem um Nightmare!",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}} ganhou\num Encore!",
|
||||||
|
"encoreOnRemove": "O Encore de {{pokemonNameWithAffix}}\nacabou!",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}} está pronto para\najudar {{pokemonName}}!",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}} absorveu\nnutrientes com suas raízes!",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}} plantou suas raízes!",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}} se cercou\ncom um véu de água!",
|
||||||
|
"aquaRingLapse": "{{moveName}} restaurou\nPS de {{pokemonName}}!",
|
||||||
|
"drowsyOnAdd": "{{pokemonNameWithAffix}} ficou com sono!",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}} foi ferido\npelo {{moveName}}!",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}} foi espremido\npelo {{moveName}} de {{sourcePokemonName}}!",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}} foi enrolado\npor {{sourcePokemonName}}!",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}} ficou preso\nno vórtice!",
|
||||||
|
"clampOnTrap": "{{sourcePokemonNameWithAffix}} prendeu\n{{pokemonName}}!",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}} foi preso\npor {{moveName}}!",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}} foi preso\npor um redemoinho de magma!",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}} foi preso\npor uma armadilha!",
|
||||||
|
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}} prendeu\n{{pokemonNameWithAffix}}!",
|
||||||
|
"infestationOnTrap": "{{pokemonNameWithAffix}} foi ferido por \numa infestação de {{sourcePokemonNameWithAffix}}!",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}}\nse protegeu!",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}}\nse protegeu!",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}} está\npreparado!",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}} suportou\no golpe!",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}} suportou\no golpe!",
|
||||||
|
"perishSongLapse": "O tempo restante de {{pokemonNameWithAffix}} diminuiu para {{turnCount}}.",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}} virou o centro\ndas atenções!",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}} está\nviajando na maionese!",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}} não\nestá preparado!",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}} finalmente\nconseguiu se recompor!",
|
||||||
|
"highestStatBoostOnAdd": "O atributo de {{statName}} de\n{{pokemonNameWithAffix}} aumentou!",
|
||||||
|
"highestStatBoostOnRemove": "Os efeitos do {{abilityName}} de\n{{pokemonNameWithAffix}} acabaram!",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}} levitou com eletromagnetismo!",
|
||||||
|
"magnetRisenOnRemove": "O eletromagnetismo de {{pokemonNameWithAffix}} sumiu!",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}} está ficando\nbombado!",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}} relaxou.",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}} está sendo curado com sal!",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}} foi ferido pelo {{moveName}}!",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}} cortou seus PS pela metade e amaldiçoou {{pokemonName}}!",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}} foi ferido pelo Curse!",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}} estocou {{stockpiledCount}}!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -13,9 +13,11 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"passive": "Passiva",
|
"passive": "Passiva",
|
||||||
"passiveUnlocked": "Passiva Desbloqueada",
|
"passiveUnlocked": "Passiva Desbloqueada",
|
||||||
"passiveLocked": "Passiva Bloqueada",
|
"passiveLocked": "Passiva Bloqueada",
|
||||||
|
"passiveUnlockable": "Passive - Can Unlock",
|
||||||
"costReduction": "Redução de Custo",
|
"costReduction": "Redução de Custo",
|
||||||
"costReductionUnlocked": "Redução de Custo Desbloq.",
|
"costReductionUnlocked": "Redução de Custo Desbloq.",
|
||||||
"costReductionLocked": "Redução de Custo Bloq.",
|
"costReductionLocked": "Redução de Custo Bloq.",
|
||||||
|
"costReductionUnlockable": "Cost Reduction - Can Unlock",
|
||||||
"favorite": "Favorite",
|
"favorite": "Favorite",
|
||||||
"isFavorite": "Favorite - Yes",
|
"isFavorite": "Favorite - Yes",
|
||||||
"notFavorite": "Favorite - No",
|
"notFavorite": "Favorite - No",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "Habilidade Oculta",
|
"hiddenAbility": "Habilidade Oculta",
|
||||||
"hasHiddenAbility": "Habilidade Oculta - Sim",
|
"hasHiddenAbility": "Habilidade Oculta - Sim",
|
||||||
"noHiddenAbility": "Habilidade Oculta - Não",
|
"noHiddenAbility": "Habilidade Oculta - Não",
|
||||||
|
"egg": "Egg",
|
||||||
|
"eggPurchasable": "Purchasable Egg",
|
||||||
"pokerus": "Pokérus",
|
"pokerus": "Pokérus",
|
||||||
"hasPokerus": "Pokérus - Sim",
|
"hasPokerus": "Pokérus - Sim",
|
||||||
"noPokerus": "Pokérus - Não",
|
"noPokerus": "Pokérus - Não",
|
||||||
|
@ -97,5 +97,6 @@ export const settings: SimpleTranslationEntries = {
|
|||||||
"controller": "Controle",
|
"controller": "Controle",
|
||||||
"gamepadSupport": "Suporte para Controle",
|
"gamepadSupport": "Suporte para Controle",
|
||||||
"showBgmBar": "Exibir Nomes das Músicas",
|
"showBgmBar": "Exibir Nomes das Músicas",
|
||||||
|
"moveTouchControls": "Move Touch Controls",
|
||||||
"shopOverlayOpacity": "Opacidade da Loja"
|
"shopOverlayOpacity": "Opacidade da Loja"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -87,65 +87,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"unlockedSomething": "{{unlockedThing}}\n已解锁。",
|
"unlockedSomething": "{{unlockedThing}}\n已解锁。",
|
||||||
"congratulations": "恭喜!",
|
"congratulations": "恭喜!",
|
||||||
"beatModeFirstTime": "{{speciesName}}首次击败了{{gameMode}}!\n你获得了{{newModifier}}!",
|
"beatModeFirstTime": "{{speciesName}}首次击败了{{gameMode}}!\n你获得了{{newModifier}}!",
|
||||||
"battlerTagsRechargingLapse": "{{pokemonNameWithAffix}}\n因攻击的反作用力而无法动弹!",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}不能逃跑!",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}}\n摆脱了{{moveName}}!",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}}\n畏缩了,无法使出招式!",
|
|
||||||
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}}\n混乱了!",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}}\n的混乱解除了!",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}}\n已经混乱了。",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}}\n正在混乱中!",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "不知所以地攻击了自己!",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}}\n不再受到同命的影响",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}}\n和{{pokemonNameWithAffix2}}同归于尽了!",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}}\n对{{sourcePokemonName}}着迷了!",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}}\n已经着迷了!",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}}\n对{{sourcePokemonName}}着迷中!",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}}\n不会着迷!",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}}\n治愈了着迷状态!",
|
|
||||||
"battlerTagsSeededOnAdd": "将种子种植在了\n{{pokemonNameWithAffix}}的身上!",
|
|
||||||
"battlerTagsSeededLapse": "{{pokemonNameWithAffix}}\n被寄生种子吸取了体力!",
|
|
||||||
"battlerTagsSeededLapseShed": "{{pokemonNameWithAffix}}\n吸到了污泥浆!",
|
|
||||||
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}}\n开始做恶梦了!",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}}\n已经被恶梦缠身!",
|
|
||||||
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}}\n正被恶梦缠身!",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}}\n接受了再来一次!",
|
|
||||||
"battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}}\n的再来一次状态解除了!",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}}\n摆出了帮助{{pokemonName}}的架势!",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}}\n用扎根回复了体力!",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}}\n扎根了!",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}}\n用水流环包裹了自己!",
|
|
||||||
"battlerTagsAquaRingLapse": "{{moveName}}回复了\n{{pokemonName}}的体力!",
|
|
||||||
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}}\n产生睡意了!",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}}受到了\n{{moveName}}的伤害!",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}}被\n{{sourcePokemonName}}的{{moveName}}紧紧束缚住了!",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}}被\n{{sourcePokemonName}}绑紧了!",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}}\n被困在了旋涡之中!",
|
|
||||||
"battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}}用贝壳\n夹住了{{pokemonName}}!",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}}\n被{{moveName}}困住了!",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}}\n被困在了熔岩风暴之中!",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}}\n被捕兽夹困住了!",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}}困住了\n{{pokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}}受到了\n{{sourcePokemonNameWithAffix}}的死缠烂打!",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}\n摆出了防守的架势!",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}\n在攻击中保护了自己!",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}}\n摆出了挺住攻击的架势!",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}\n挺住了攻击!",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}\n挺住了攻击!",
|
|
||||||
"battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}\n的灭亡计时变成{{turnCount}}了!",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}}\n变得万众瞩目了!",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}}\n正在偷懒!",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}\n无法拿出平时的水平!",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}\n恢复了平时的水平!",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}的\n{{statName}}提高了!",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "{{pokemonNameWithAffix}}的\n{{abilityName}}效果解除了!",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}}\n因电磁力浮了起来!",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}的\n电磁力消失了!",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}\n现在干劲十足!",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}}\n如释重负似地放松了下来。",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}}\n陷入了盐腌状态!",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}}\n受到了{{moveName}}的伤害!",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}削减了自己的体力,\n并诅咒了{{pokemonName}}!",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}}\n正受到诅咒!",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}}蓄力了{{stockpiledCount}}次!"
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "恶梦",
|
"nightmareDesc": "恶梦",
|
||||||
"ingrainDesc": "扎根",
|
"ingrainDesc": "扎根",
|
||||||
"drowsyDesc": "瞌睡",
|
"drowsyDesc": "瞌睡",
|
||||||
|
"rechargingLapse": "{{pokemonNameWithAffix}}\n因攻击的反作用力而无法动弹!",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}}不能逃跑!",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}}\n摆脱了{{moveName}}!",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}}\n畏缩了,无法使出招式!",
|
||||||
|
"confusedOnAdd": "{{pokemonNameWithAffix}}\n混乱了!",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}}\n的混乱解除了!",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}}\n已经混乱了。",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}}\n正在混乱中!",
|
||||||
|
"confusedLapseHurtItself": "不知所以地攻击了自己!",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}}\n不再受到同命的影响",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}}\n和{{pokemonNameWithAffix2}}同归于尽了!",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}}\n对{{sourcePokemonName}}着迷了!",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}}\n已经着迷了!",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}}\n对{{sourcePokemonName}}着迷中!",
|
||||||
|
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}}\n不会着迷!",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}}\n治愈了着迷状态!",
|
||||||
|
"seededOnAdd": "将种子种植在了\n{{pokemonNameWithAffix}}的身上!",
|
||||||
|
"seededLapse": "{{pokemonNameWithAffix}}\n被寄生种子吸取了体力!",
|
||||||
|
"seededLapseShed": "{{pokemonNameWithAffix}}\n吸到了污泥浆!",
|
||||||
|
"nightmareOnAdd": "{{pokemonNameWithAffix}}\n开始做恶梦了!",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}}\n已经被恶梦缠身!",
|
||||||
|
"nightmareLapse": "{{pokemonNameWithAffix}}\n正被恶梦缠身!",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}}\n接受了再来一次!",
|
||||||
|
"encoreOnRemove": "{{pokemonNameWithAffix}}\n的再来一次状态解除了!",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}}\n摆出了帮助{{pokemonName}}的架势!",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}}\n用扎根回复了体力!",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}}\n扎根了!",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}}\n用水流环包裹了自己!",
|
||||||
|
"aquaRingLapse": "{{moveName}}回复了\n{{pokemonName}}的体力!",
|
||||||
|
"drowsyOnAdd": "{{pokemonNameWithAffix}}\n产生睡意了!",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}}受到了\n{{moveName}}的伤害!",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}}被\n{{sourcePokemonName}}的{{moveName}}紧紧束缚住了!",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}}被\n{{sourcePokemonName}}绑紧了!",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}}\n被困在了旋涡之中!",
|
||||||
|
"clampOnTrap": "{{sourcePokemonNameWithAffix}}用贝壳\n夹住了{{pokemonName}}!",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}}\n被{{moveName}}困住了!",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}}\n被困在了熔岩风暴之中!",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}}\n被捕兽夹困住了!",
|
||||||
|
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}}困住了\n{{pokemonNameWithAffix}}!",
|
||||||
|
"infestationOnTrap": "{{pokemonNameWithAffix}}受到了\n{{sourcePokemonNameWithAffix}}的死缠烂打!",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}}\n摆出了防守的架势!",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}}\n在攻击中保护了自己!",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}}\n摆出了挺住攻击的架势!",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}}\n挺住了攻击!",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}}\n挺住了攻击!",
|
||||||
|
"perishSongLapse": "{{pokemonNameWithAffix}}\n的灭亡计时变成{{turnCount}}了!",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}}\n变得万众瞩目了!",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}}\n正在偷懒!",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}}\n无法拿出平时的水平!",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}}\n恢复了平时的水平!",
|
||||||
|
"highestStatBoostOnAdd": "{{pokemonNameWithAffix}}的\n{{statName}}提高了!",
|
||||||
|
"highestStatBoostOnRemove": "{{pokemonNameWithAffix}}的\n{{abilityName}}效果解除了!",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}}\n因电磁力浮了起来!",
|
||||||
|
"magnetRisenOnRemove": "{{pokemonNameWithAffix}}的\n电磁力消失了!",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}}\n现在干劲十足!",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}}\n如释重负似地放松了下来。",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}}\n陷入了盐腌状态!",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}}\n受到了{{moveName}}的伤害!",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}}削减了自己的体力,\n并诅咒了{{pokemonName}}!",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}}\n正受到诅咒!",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}}蓄力了{{stockpiledCount}}次!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -13,9 +13,11 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"passive": "被动",
|
"passive": "被动",
|
||||||
"passiveUnlocked": "被动解锁",
|
"passiveUnlocked": "被动解锁",
|
||||||
"passiveLocked": "被动未解锁",
|
"passiveLocked": "被动未解锁",
|
||||||
|
"passiveUnlockable": "Passive - Can Unlock",
|
||||||
"costReduction": "费用降低",
|
"costReduction": "费用降低",
|
||||||
"costReductionUnlocked": "已降费",
|
"costReductionUnlocked": "已降费",
|
||||||
"costReductionLocked": "未降费",
|
"costReductionLocked": "未降费",
|
||||||
|
"costReductionUnlockable": "Cost Reduction - Can Unlock",
|
||||||
"favorite": "Favorite",
|
"favorite": "Favorite",
|
||||||
"isFavorite": "Favorite - Yes",
|
"isFavorite": "Favorite - Yes",
|
||||||
"notFavorite": "Favorite - No",
|
"notFavorite": "Favorite - No",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "梦特",
|
"hiddenAbility": "梦特",
|
||||||
"hasHiddenAbility": "有梦特",
|
"hasHiddenAbility": "有梦特",
|
||||||
"noHiddenAbility": "无梦特",
|
"noHiddenAbility": "无梦特",
|
||||||
|
"egg": "Egg",
|
||||||
|
"eggPurchasable": "Purchasable Egg",
|
||||||
"pokerus": "病毒",
|
"pokerus": "病毒",
|
||||||
"hasPokerus": "有病毒",
|
"hasPokerus": "有病毒",
|
||||||
"noPokerus": "无病毒",
|
"noPokerus": "无病毒",
|
||||||
|
@ -97,5 +97,6 @@ export const settings: SimpleTranslationEntries = {
|
|||||||
"controller": "控制器",
|
"controller": "控制器",
|
||||||
"gamepadSupport": "手柄支持",
|
"gamepadSupport": "手柄支持",
|
||||||
"showBgmBar": "显示音乐名称",
|
"showBgmBar": "显示音乐名称",
|
||||||
|
"moveTouchControls": "移动触摸控制",
|
||||||
"shopOverlayOpacity": "商店显示不透明度"
|
"shopOverlayOpacity": "商店显示不透明度"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -84,65 +84,4 @@ export const battle: SimpleTranslationEntries = {
|
|||||||
"unlockedSomething": "{{unlockedThing}}\nhas been unlocked.",
|
"unlockedSomething": "{{unlockedThing}}\nhas been unlocked.",
|
||||||
"congratulations": "Congratulations!",
|
"congratulations": "Congratulations!",
|
||||||
"beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!",
|
"beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!",
|
||||||
"battlerTagsRechargingLapse": "{{pokemonNameWithAffix}}因攻擊的反作用力而無法動彈!",
|
|
||||||
"battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}不能逃跑!",
|
|
||||||
"battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}}擺脫了{{moveName}}!",
|
|
||||||
"battlerTagsFlinchedLapse": "{{pokemonNameWithAffix}}畏縮了!",
|
|
||||||
"battlerTagsConfusedOnAdd": "{{pokemonNameWithAffix}}混亂了!",
|
|
||||||
"battlerTagsConfusedOnRemove": "{{pokemonNameWithAffix}}的混亂解除了!",
|
|
||||||
"battlerTagsConfusedOnOverlap": "{{pokemonNameWithAffix}}已經混亂了。",
|
|
||||||
"battlerTagsConfusedLapse": "{{pokemonNameWithAffix}}正在混亂中!",
|
|
||||||
"battlerTagsConfusedLapseHurtItself": "不知所以地攻擊了自己!",
|
|
||||||
"battlerTagsDestinyBondLapseIsBoss": "{{pokemonNameWithAffix}}不再受到同命的影響",
|
|
||||||
"battlerTagsDestinyBondLapse": "{{pokemonNameWithAffix}} 和{{pokemonNameWithAffix2}} 同歸於盡了!",
|
|
||||||
"battlerTagsInfatuatedOnAdd": "{{pokemonNameWithAffix}}對{{sourcePokemonName}}著迷了!",
|
|
||||||
"battlerTagsInfatuatedOnOverlap": "{{pokemonNameWithAffix}}已經著迷了!",
|
|
||||||
"battlerTagsInfatuatedLapse": "{{pokemonNameWithAffix}}對{{sourcePokemonName}}著迷中!",
|
|
||||||
"battlerTagsInfatuatedLapseImmobilize": "{{pokemonNameWithAffix}} 不會著迷!",
|
|
||||||
"battlerTagsInfatuatedOnRemove": "{{pokemonNameWithAffix}} 治癒了著迷狀態!",
|
|
||||||
"battlerTagsSeededOnAdd": "將種子種植在了{{pokemonNameWithAffix}}身上!",
|
|
||||||
"battlerTagsSeededLapse": "{{pokemonNameWithAffix}}被寄生種子吸取了體力!",
|
|
||||||
"battlerTagsSeededLapseShed": "{{pokemonNameWithAffix}}吸到了污泥漿!",
|
|
||||||
"battlerTagsNightmareOnAdd": "{{pokemonNameWithAffix}}開始做惡夢了!",
|
|
||||||
"battlerTagsNightmareOnOverlap": "{{pokemonNameWithAffix}}已經被惡夢纏身!",
|
|
||||||
"battlerTagsNightmareLapse": "{{pokemonNameWithAffix}}正被惡夢纏身!",
|
|
||||||
"battlerTagsEncoreOnAdd": "{{pokemonNameWithAffix}}接受了再來一次!",
|
|
||||||
"battlerTagsEncoreOnRemove": "{{pokemonNameWithAffix}}的再來一次狀態解除了!",
|
|
||||||
"battlerTagsHelpingHandOnAdd": "{{pokemonNameWithAffix}}擺出了幫助{{pokemonName}} 的架勢!",
|
|
||||||
"battlerTagsIngrainLapse": "{{pokemonNameWithAffix}}用扎根回復了體力!",
|
|
||||||
"battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}}扎根了!",
|
|
||||||
"battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}}用水流環包裹了自己!",
|
|
||||||
"battlerTagsAquaRingLapse": "{{moveName}}回復了{{pokemonName}}的體力!",
|
|
||||||
"battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}}產生睡意了!",
|
|
||||||
"battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}}受到了{{moveName}}的傷害!",
|
|
||||||
"battlerTagsBindOnTrap": "{{pokemonNameWithAffix}}被{{sourcePokemonName}}的 {{moveName}}緊緊束縛住了!",
|
|
||||||
"battlerTagsWrapOnTrap": "{{pokemonNameWithAffix}}被{{sourcePokemonName}}綁緊了!",
|
|
||||||
"battlerTagsVortexOnTrap": "{{pokemonNameWithAffix}}被困在了旋渦之中!",
|
|
||||||
"battlerTagsClampOnTrap": "{{sourcePokemonNameWithAffix}}用貝殼夾住了{{pokemonName}}!",
|
|
||||||
"battlerTagsSandTombOnTrap": "{{pokemonNameWithAffix}}被{{moveName}}困住了!",
|
|
||||||
"battlerTagsMagmaStormOnTrap": "{{pokemonNameWithAffix}}被困在了熔岩風暴之中!",
|
|
||||||
"battlerTagsSnapTrapOnTrap": "{{pokemonNameWithAffix}}被捕獸夾困住了!",
|
|
||||||
"battlerTagsThunderCageOnTrap": "{{sourcePokemonNameWithAffix}}困住了{{pokemonNameWithAffix}}!",
|
|
||||||
"battlerTagsInfestationOnTrap": "{{pokemonNameWithAffix}}受到了{{sourcePokemonNameWithAffix}}的死纏爛打!",
|
|
||||||
"battlerTagsProtectedOnAdd": "{{pokemonNameWithAffix}}擺出了防守的架勢!",
|
|
||||||
"battlerTagsProtectedLapse": "{{pokemonNameWithAffix}}在攻擊中保護了自己!",
|
|
||||||
"battlerTagsEnduringOnAdd": "{{pokemonNameWithAffix}}擺出了挺住攻擊的架勢!",
|
|
||||||
"battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}挺住了攻擊!",
|
|
||||||
"battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}挺住了攻擊!",
|
|
||||||
"battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}} 的滅亡計時變成{{turnCount}}了!",
|
|
||||||
"battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}}\n變得萬眾矚目了!",
|
|
||||||
"battlerTagsTruantLapse": "{{pokemonNameWithAffix}}正在偷懶!",
|
|
||||||
"battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}無法拿出平時的水平!",
|
|
||||||
"battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}恢復了平時的水平!",
|
|
||||||
"battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}的{{statName}}升高了!",
|
|
||||||
"battlerTagsHighestStatBoostOnRemove": "{{pokemonNameWithAffix}}的{{abilityName}}效果解除了!",
|
|
||||||
"battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}}\n因電磁力浮了起來!",
|
|
||||||
"battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}的\n電磁力消失了!",
|
|
||||||
"battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}現在幹勁十足!",
|
|
||||||
"battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}}如釋重負似地放鬆了下來。",
|
|
||||||
"battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} 陷入了鹽腌狀態!",
|
|
||||||
"battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} 受到了{{moveName}}的傷害!",
|
|
||||||
"battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}削減了自己的體力,並詛咒了{{pokemonName}}!",
|
|
||||||
"battlerTagsCursedLapse": "{{pokemonNameWithAffix}}正受到詛咒!",
|
|
||||||
"battlerTagsStockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!"
|
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -9,4 +9,65 @@ export const battlerTags: SimpleTranslationEntries = {
|
|||||||
"nightmareDesc": "惡夢",
|
"nightmareDesc": "惡夢",
|
||||||
"ingrainDesc": "扎根",
|
"ingrainDesc": "扎根",
|
||||||
"drowsyDesc": "瞌睡",
|
"drowsyDesc": "瞌睡",
|
||||||
|
"rechargingLapse": "{{pokemonNameWithAffix}}因攻擊的反作用力而無法動彈!",
|
||||||
|
"trappedOnAdd": "{{pokemonNameWithAffix}}不能逃跑!",
|
||||||
|
"trappedOnRemove": "{{pokemonNameWithAffix}}擺脫了{{moveName}}!",
|
||||||
|
"flinchedLapse": "{{pokemonNameWithAffix}}畏縮了!",
|
||||||
|
"confusedOnAdd": "{{pokemonNameWithAffix}}混亂了!",
|
||||||
|
"confusedOnRemove": "{{pokemonNameWithAffix}}的混亂解除了!",
|
||||||
|
"confusedOnOverlap": "{{pokemonNameWithAffix}}已經混亂了。",
|
||||||
|
"confusedLapse": "{{pokemonNameWithAffix}}正在混亂中!",
|
||||||
|
"confusedLapseHurtItself": "不知所以地攻擊了自己!",
|
||||||
|
"destinyBondLapseIsBoss": "{{pokemonNameWithAffix}}不再受到同命的影響",
|
||||||
|
"destinyBondLapse": "{{pokemonNameWithAffix}} 和{{pokemonNameWithAffix2}} 同歸於盡了!",
|
||||||
|
"infatuatedOnAdd": "{{pokemonNameWithAffix}}對{{sourcePokemonName}}著迷了!",
|
||||||
|
"infatuatedOnOverlap": "{{pokemonNameWithAffix}}已經著迷了!",
|
||||||
|
"infatuatedLapse": "{{pokemonNameWithAffix}}對{{sourcePokemonName}}著迷中!",
|
||||||
|
"infatuatedLapseImmobilize": "{{pokemonNameWithAffix}} 不會著迷!",
|
||||||
|
"infatuatedOnRemove": "{{pokemonNameWithAffix}} 治癒了著迷狀態!",
|
||||||
|
"seededOnAdd": "將種子種植在了{{pokemonNameWithAffix}}身上!",
|
||||||
|
"seededLapse": "{{pokemonNameWithAffix}}被寄生種子吸取了體力!",
|
||||||
|
"seededLapseShed": "{{pokemonNameWithAffix}}吸到了污泥漿!",
|
||||||
|
"nightmareOnAdd": "{{pokemonNameWithAffix}}開始做惡夢了!",
|
||||||
|
"nightmareOnOverlap": "{{pokemonNameWithAffix}}已經被惡夢纏身!",
|
||||||
|
"nightmareLapse": "{{pokemonNameWithAffix}}正被惡夢纏身!",
|
||||||
|
"encoreOnAdd": "{{pokemonNameWithAffix}}接受了再來一次!",
|
||||||
|
"encoreOnRemove": "{{pokemonNameWithAffix}}的再來一次狀態解除了!",
|
||||||
|
"helpingHandOnAdd": "{{pokemonNameWithAffix}}擺出了幫助{{pokemonName}} 的架勢!",
|
||||||
|
"ingrainLapse": "{{pokemonNameWithAffix}}用扎根回復了體力!",
|
||||||
|
"ingrainOnTrap": "{{pokemonNameWithAffix}}扎根了!",
|
||||||
|
"aquaRingOnAdd": "{{pokemonNameWithAffix}}用水流環包裹了自己!",
|
||||||
|
"aquaRingLapse": "{{moveName}}回復了{{pokemonName}}的體力!",
|
||||||
|
"drowsyOnAdd": "{{pokemonNameWithAffix}}產生睡意了!",
|
||||||
|
"damagingTrapLapse": "{{pokemonNameWithAffix}}受到了{{moveName}}的傷害!",
|
||||||
|
"bindOnTrap": "{{pokemonNameWithAffix}}被{{sourcePokemonName}}的 {{moveName}}緊緊束縛住了!",
|
||||||
|
"wrapOnTrap": "{{pokemonNameWithAffix}}被{{sourcePokemonName}}綁緊了!",
|
||||||
|
"vortexOnTrap": "{{pokemonNameWithAffix}}被困在了旋渦之中!",
|
||||||
|
"clampOnTrap": "{{sourcePokemonNameWithAffix}}用貝殼夾住了{{pokemonName}}!",
|
||||||
|
"sandTombOnTrap": "{{pokemonNameWithAffix}}被{{moveName}}困住了!",
|
||||||
|
"magmaStormOnTrap": "{{pokemonNameWithAffix}}被困在了熔岩風暴之中!",
|
||||||
|
"snapTrapOnTrap": "{{pokemonNameWithAffix}}被捕獸夾困住了!",
|
||||||
|
"thunderCageOnTrap": "{{sourcePokemonNameWithAffix}}困住了{{pokemonNameWithAffix}}!",
|
||||||
|
"infestationOnTrap": "{{pokemonNameWithAffix}}受到了{{sourcePokemonNameWithAffix}}的死纏爛打!",
|
||||||
|
"protectedOnAdd": "{{pokemonNameWithAffix}}擺出了防守的架勢!",
|
||||||
|
"protectedLapse": "{{pokemonNameWithAffix}}在攻擊中保護了自己!",
|
||||||
|
"enduringOnAdd": "{{pokemonNameWithAffix}}擺出了挺住攻擊的架勢!",
|
||||||
|
"enduringLapse": "{{pokemonNameWithAffix}}挺住了攻擊!",
|
||||||
|
"sturdyLapse": "{{pokemonNameWithAffix}}挺住了攻擊!",
|
||||||
|
"perishSongLapse": "{{pokemonNameWithAffix}} 的滅亡計時變成{{turnCount}}了!",
|
||||||
|
"centerOfAttentionOnAdd": "{{pokemonNameWithAffix}}\n變得萬眾矚目了!",
|
||||||
|
"truantLapse": "{{pokemonNameWithAffix}}正在偷懶!",
|
||||||
|
"slowStartOnAdd": "{{pokemonNameWithAffix}}無法拿出平時的水平!",
|
||||||
|
"slowStartOnRemove": "{{pokemonNameWithAffix}}恢復了平時的水平!",
|
||||||
|
"highestStatBoostOnAdd": "{{pokemonNameWithAffix}}的{{statName}}升高了!",
|
||||||
|
"highestStatBoostOnRemove": "{{pokemonNameWithAffix}}的{{abilityName}}效果解除了!",
|
||||||
|
"magnetRisenOnAdd": "{{pokemonNameWithAffix}}\n因電磁力浮了起來!",
|
||||||
|
"magnetRisenOnRemove": "{{pokemonNameWithAffix}}的\n電磁力消失了!",
|
||||||
|
"critBoostOnAdd": "{{pokemonNameWithAffix}}現在幹勁十足!",
|
||||||
|
"critBoostOnRemove": "{{pokemonNameWithAffix}}如釋重負似地放鬆了下來。",
|
||||||
|
"saltCuredOnAdd": "{{pokemonNameWithAffix}} 陷入了鹽腌狀態!",
|
||||||
|
"saltCuredLapse": "{{pokemonNameWithAffix}} 受到了{{moveName}}的傷害!",
|
||||||
|
"cursedOnAdd": "{{pokemonNameWithAffix}}削減了自己的體力,並詛咒了{{pokemonName}}!",
|
||||||
|
"cursedLapse": "{{pokemonNameWithAffix}}正受到詛咒!",
|
||||||
|
"stockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!",
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -13,9 +13,11 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"passive": "被動",
|
"passive": "被動",
|
||||||
"passiveUnlocked": "被動解鎖",
|
"passiveUnlocked": "被動解鎖",
|
||||||
"passiveLocked": "被動未解鎖",
|
"passiveLocked": "被動未解鎖",
|
||||||
|
"passiveUnlockable": "Passive - Can Unlock",
|
||||||
"costReduction": "Cost Reduction",
|
"costReduction": "Cost Reduction",
|
||||||
"costReductionUnlocked": "Cost Reduction Unlocked",
|
"costReductionUnlocked": "Cost Reduction Unlocked",
|
||||||
"costReductionLocked": "Cost Reduction Locked",
|
"costReductionLocked": "Cost Reduction Locked",
|
||||||
|
"costReductionUnlockable": "Cost Reduction - Can Unlock",
|
||||||
"favorite": "Favorite",
|
"favorite": "Favorite",
|
||||||
"isFavorite": "Favorite - Yes",
|
"isFavorite": "Favorite - Yes",
|
||||||
"notFavorite": "Favorite - No",
|
"notFavorite": "Favorite - No",
|
||||||
@ -25,6 +27,8 @@ export const filterBar: SimpleTranslationEntries = {
|
|||||||
"hiddenAbility": "Hidden Ability",
|
"hiddenAbility": "Hidden Ability",
|
||||||
"hasHiddenAbility": "Hidden Ability - Yes",
|
"hasHiddenAbility": "Hidden Ability - Yes",
|
||||||
"noHiddenAbility": "Hidden Ability - No",
|
"noHiddenAbility": "Hidden Ability - No",
|
||||||
|
"egg": "Egg",
|
||||||
|
"eggPurchasable": "Purchasable Egg",
|
||||||
"pokerus": "Pokerus",
|
"pokerus": "Pokerus",
|
||||||
"hasPokerus": "Pokerus - Yes",
|
"hasPokerus": "Pokerus - Yes",
|
||||||
"noPokerus": "Pokerus - No",
|
"noPokerus": "Pokerus - No",
|
||||||
|
@ -97,5 +97,6 @@ export const settings: SimpleTranslationEntries = {
|
|||||||
"controller": "控制器",
|
"controller": "控制器",
|
||||||
"gamepadSupport": "手柄支持",
|
"gamepadSupport": "手柄支持",
|
||||||
"showBgmBar": "Show Music Names",
|
"showBgmBar": "Show Music Names",
|
||||||
|
"moveTouchControls": "移動觸控控制",
|
||||||
"shopOverlayOpacity": "Shop Overlay Opacity"
|
"shopOverlayOpacity": "Shop Overlay Opacity"
|
||||||
} as const;
|
} as const;
|
||||||
|
@ -1545,7 +1545,7 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(modifierTypes.RARE_EVOLUTION_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15) * 4, 32), 32),
|
new WeightedModifierType(modifierTypes.RARE_EVOLUTION_ITEM, (party: Pokemon[]) => Math.min(Math.ceil(party[0].scene.currentBattle.waveIndex / 15) * 4, 32), 32),
|
||||||
new WeightedModifierType(modifierTypes.AMULET_COIN, skipInLastClassicWaveOrDefault(3)),
|
new WeightedModifierType(modifierTypes.AMULET_COIN, skipInLastClassicWaveOrDefault(3)),
|
||||||
new WeightedModifierType(modifierTypes.EVIOLITE, (party: Pokemon[]) => {
|
new WeightedModifierType(modifierTypes.EVIOLITE, (party: Pokemon[]) => {
|
||||||
if (party[0].scene.gameData.unlocks[Unlockables.EVIOLITE]) {
|
if (!party[0].scene.gameMode.isFreshStartChallenge() && party[0].scene.gameData.unlocks[Unlockables.EVIOLITE]) {
|
||||||
return party.some(p => ((p.getSpeciesForm(true).speciesId in pokemonEvolutions) || (p.isFusion() && (p.getFusionSpeciesForm(true).speciesId in pokemonEvolutions))) && !p.getHeldItems().some(i => i instanceof Modifiers.EvolutionStatBoosterModifier)) ? 10 : 0;
|
return party.some(p => ((p.getSpeciesForm(true).speciesId in pokemonEvolutions) || (p.isFusion() && (p.getFusionSpeciesForm(true).speciesId in pokemonEvolutions))) && !p.getHeldItems().some(i => i instanceof Modifiers.EvolutionStatBoosterModifier)) ? 10 : 0;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -1604,7 +1604,7 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(modifierTypes.SOUL_DEW, 7),
|
new WeightedModifierType(modifierTypes.SOUL_DEW, 7),
|
||||||
//new WeightedModifierType(modifierTypes.OVAL_CHARM, 6),
|
//new WeightedModifierType(modifierTypes.OVAL_CHARM, 6),
|
||||||
new WeightedModifierType(modifierTypes.SOOTHE_BELL, 4),
|
new WeightedModifierType(modifierTypes.SOOTHE_BELL, 4),
|
||||||
new WeightedModifierType(modifierTypes.ABILITY_CHARM, 6),
|
new WeightedModifierType(modifierTypes.ABILITY_CHARM, skipInClassicAfterWave(189, 6)),
|
||||||
new WeightedModifierType(modifierTypes.FOCUS_BAND, 5),
|
new WeightedModifierType(modifierTypes.FOCUS_BAND, 5),
|
||||||
new WeightedModifierType(modifierTypes.KINGS_ROCK, 3),
|
new WeightedModifierType(modifierTypes.KINGS_ROCK, 3),
|
||||||
new WeightedModifierType(modifierTypes.LOCK_CAPSULE, 3),
|
new WeightedModifierType(modifierTypes.LOCK_CAPSULE, 3),
|
||||||
@ -1623,7 +1623,7 @@ const modifierPool: ModifierPool = {
|
|||||||
new WeightedModifierType(modifierTypes.MULTI_LENS, 18),
|
new WeightedModifierType(modifierTypes.MULTI_LENS, 18),
|
||||||
new WeightedModifierType(modifierTypes.VOUCHER_PREMIUM, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily && !party[0].scene.gameMode.isEndless && !party[0].scene.gameMode.isSplicedOnly ? Math.max(5 - rerollCount * 2, 0) : 0, 5),
|
new WeightedModifierType(modifierTypes.VOUCHER_PREMIUM, (party: Pokemon[], rerollCount: integer) => !party[0].scene.gameMode.isDaily && !party[0].scene.gameMode.isEndless && !party[0].scene.gameMode.isSplicedOnly ? Math.max(5 - rerollCount * 2, 0) : 0, 5),
|
||||||
new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => !party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 24 : 0, 24),
|
new WeightedModifierType(modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => !party[0].scene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 24 : 0, 24),
|
||||||
new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE] ? 1 : 0, 1),
|
new WeightedModifierType(modifierTypes.MINI_BLACK_HOLE, (party: Pokemon[]) => (!party[0].scene.gameMode.isFreshStartChallenge() && party[0].scene.gameData.unlocks[Unlockables.MINI_BLACK_HOLE]) ? 1 : 0, 1),
|
||||||
].map(m => {
|
].map(m => {
|
||||||
m.setTier(ModifierTier.MASTER); return m;
|
m.setTier(ModifierTier.MASTER); return m;
|
||||||
})
|
})
|
||||||
|
@ -2031,7 +2031,7 @@ export class CommandPhase extends FieldPhase {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Command.BALL:
|
case Command.BALL:
|
||||||
if (this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1))) {
|
if (!this.scene.gameMode.isFreshStartChallenge() && this.scene.arena.biomeType === Biome.END && (!this.scene.gameMode.isClassic || (this.scene.getEnemyField().filter(p => p.isActive(true)).some(p => !p.scene.gameData.dexData[p.species.speciesId].caughtAttr) && this.scene.gameData.getStarterCount(d => !!d.caughtAttr) < Object.keys(speciesStarters).length - 1))) {
|
||||||
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
this.scene.ui.setMode(Mode.COMMAND, this.fieldIndex);
|
||||||
this.scene.ui.setMode(Mode.MESSAGE);
|
this.scene.ui.setMode(Mode.MESSAGE);
|
||||||
this.scene.ui.showText(i18next.t("battle:noPokeballForce"), null, () => {
|
this.scene.ui.showText(i18next.t("battle:noPokeballForce"), null, () => {
|
||||||
@ -2581,15 +2581,6 @@ export class BattleEndPhase extends BattlePhase {
|
|||||||
|
|
||||||
this.scene.updateModifiers().then(() => this.end());
|
this.scene.updateModifiers().then(() => this.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
end() {
|
|
||||||
// removing pokemon at the end of a battle
|
|
||||||
for (const p of this.scene.getEnemyParty()) {
|
|
||||||
p.destroy();
|
|
||||||
}
|
|
||||||
|
|
||||||
super.end();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export class NewBattlePhase extends BattlePhase {
|
export class NewBattlePhase extends BattlePhase {
|
||||||
|
@ -65,6 +65,10 @@ export interface Setting {
|
|||||||
default: number
|
default: number
|
||||||
type: SettingType
|
type: SettingType
|
||||||
requireReload?: boolean
|
requireReload?: boolean
|
||||||
|
/** Whether the setting can be activated or not */
|
||||||
|
activatable?: boolean
|
||||||
|
/** Determines whether the setting should be hidden from the UI */
|
||||||
|
isHidden?: () => boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -106,6 +110,7 @@ export const SettingKeys = {
|
|||||||
SE_Volume: "SE_VOLUME",
|
SE_Volume: "SE_VOLUME",
|
||||||
Music_Preference: "MUSIC_PREFERENCE",
|
Music_Preference: "MUSIC_PREFERENCE",
|
||||||
Show_BGM_Bar: "SHOW_BGM_BAR",
|
Show_BGM_Bar: "SHOW_BGM_BAR",
|
||||||
|
Move_Touch_Controls: "MOVE_TOUCH_CONTROLS",
|
||||||
Shop_Overlay_Opacity: "SHOP_OVERLAY_OPACITY"
|
Shop_Overlay_Opacity: "SHOP_OVERLAY_OPACITY"
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -550,6 +555,20 @@ export const Setting: Array<Setting> = [
|
|||||||
type: SettingType.AUDIO,
|
type: SettingType.AUDIO,
|
||||||
requireReload: true
|
requireReload: true
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
key: SettingKeys.Move_Touch_Controls,
|
||||||
|
label: i18next.t("settings:moveTouchControls"),
|
||||||
|
options: [
|
||||||
|
{
|
||||||
|
value: "Configure",
|
||||||
|
label: i18next.t("settings:change")
|
||||||
|
}
|
||||||
|
],
|
||||||
|
default: 0,
|
||||||
|
type: SettingType.GENERAL,
|
||||||
|
activatable: true,
|
||||||
|
isHidden: () => !hasTouchscreen()
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: SettingKeys.Shop_Overlay_Opacity,
|
key: SettingKeys.Shop_Overlay_Opacity,
|
||||||
label: i18next.t("settings:shopOverlayOpacity"),
|
label: i18next.t("settings:shopOverlayOpacity"),
|
||||||
@ -557,7 +576,7 @@ export const Setting: Array<Setting> = [
|
|||||||
default: 7,
|
default: 7,
|
||||||
type: SettingType.DISPLAY,
|
type: SettingType.DISPLAY,
|
||||||
requireReload: false
|
requireReload: false
|
||||||
},
|
}
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
131
src/test/abilities/flash_fire.test.ts
Normal file
131
src/test/abilities/flash_fire.test.ts
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
import { Species } from "#app/enums/species.js";
|
||||||
|
import GameManager from "#test/utils/gameManager";
|
||||||
|
import { Abilities } from "#enums/abilities";
|
||||||
|
import { Moves } from "#enums/moves";
|
||||||
|
import Phaser from "phaser";
|
||||||
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||||
|
import { SPLASH_ONLY } from "#test/utils/testUtils";
|
||||||
|
import { MovePhase, TurnEndPhase } from "#app/phases";
|
||||||
|
import { getMovePosition } from "#test/utils/gameManagerUtils";
|
||||||
|
import { Status, StatusEffect } from "#app/data/status-effect.js";
|
||||||
|
import { BattlerTagType } from "#app/enums/battler-tag-type.js";
|
||||||
|
import { BattlerIndex } from "#app/battle.js";
|
||||||
|
|
||||||
|
describe("Abilities - Flash Fire", () => {
|
||||||
|
let phaserGame: Phaser.Game;
|
||||||
|
let game: GameManager;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
phaserGame = new Phaser.Game({
|
||||||
|
type: Phaser.HEADLESS,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
game.phaseInterceptor.restoreOg();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
game = new GameManager(phaserGame);
|
||||||
|
game.override
|
||||||
|
.battleType("single")
|
||||||
|
.ability(Abilities.FLASH_FIRE)
|
||||||
|
.startingLevel(20)
|
||||||
|
.enemyLevel(20)
|
||||||
|
.disableCrits();
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
it("immune to Fire-type moves", async() => {
|
||||||
|
game.override.enemyMoveset(Array(4).fill(Moves.EMBER)).moveset(SPLASH_ONLY);
|
||||||
|
await game.startBattle([Species.BLISSEY]);
|
||||||
|
|
||||||
|
const blissey = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
expect(blissey.hp).toBe(blissey.getMaxHp());
|
||||||
|
}, 20000);
|
||||||
|
|
||||||
|
it("not activate if the Pokémon is protected from the Fire-type move", async() => {
|
||||||
|
game.override.enemyMoveset(Array(4).fill(Moves.EMBER)).moveset([Moves.PROTECT]);
|
||||||
|
await game.startBattle([Species.BLISSEY]);
|
||||||
|
|
||||||
|
const blissey = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.PROTECT));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
expect(blissey!.getTag(BattlerTagType.FIRE_BOOST)).toBeUndefined();
|
||||||
|
}, 20000);
|
||||||
|
|
||||||
|
it("activated by Will-O-Wisp", async() => {
|
||||||
|
game.override.enemyMoveset(Array(4).fill(Moves.WILL_O_WISP)).moveset(SPLASH_ONLY);
|
||||||
|
await game.startBattle([Species.BLISSEY]);
|
||||||
|
|
||||||
|
const blissey = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH));
|
||||||
|
await game.move.forceHit();
|
||||||
|
await game.phaseInterceptor.to(MovePhase, false);
|
||||||
|
await game.move.forceHit();
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
expect(blissey!.getTag(BattlerTagType.FIRE_BOOST)).toBeDefined();
|
||||||
|
}, 20000);
|
||||||
|
|
||||||
|
it("activated after being frozen", async() => {
|
||||||
|
game.override.enemyMoveset(Array(4).fill(Moves.EMBER)).moveset(SPLASH_ONLY);
|
||||||
|
await game.startBattle([Species.BLISSEY]);
|
||||||
|
|
||||||
|
const blissey = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
|
blissey!.status = new Status(StatusEffect.FREEZE);
|
||||||
|
expect(blissey.status?.effect).toBe(StatusEffect.FREEZE);
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH));
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
expect(blissey!.getTag(BattlerTagType.FIRE_BOOST)).toBeDefined();
|
||||||
|
}, 20000);
|
||||||
|
|
||||||
|
it("not passing with baton pass", async() => {
|
||||||
|
game.override.enemyMoveset(Array(4).fill(Moves.EMBER)).moveset([Moves.BATON_PASS]);
|
||||||
|
await game.startBattle([Species.BLISSEY, Species.CHANSEY]);
|
||||||
|
|
||||||
|
// ensure use baton pass after enemy moved
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.BATON_PASS));
|
||||||
|
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
|
||||||
|
|
||||||
|
game.doSelectPartyPokemon(1);
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
const chansey = game.scene.getPlayerPokemon()!;
|
||||||
|
expect(game.scene.getPlayerPokemon()!.species.speciesId).toBe(Species.CHANSEY);
|
||||||
|
expect(chansey!.getTag(BattlerTagType.FIRE_BOOST)).toBeUndefined();
|
||||||
|
}, 20000);
|
||||||
|
|
||||||
|
it("boosts Fire-type move when the ability is activated", async() => {
|
||||||
|
game.override.enemyMoveset(Array(4).fill(Moves.FIRE_PLEDGE)).moveset([Moves.EMBER, Moves.SPLASH]);
|
||||||
|
game.override.enemyAbility(Abilities.FLASH_FIRE).ability(Abilities.NONE);
|
||||||
|
await game.startBattle([Species.BLISSEY]);
|
||||||
|
const blissey = game.scene.getPlayerPokemon()!;
|
||||||
|
const initialHP = 1000;
|
||||||
|
blissey.hp = initialHP;
|
||||||
|
|
||||||
|
// first turn
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.EMBER));
|
||||||
|
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
const originalDmg = initialHP - blissey.hp;
|
||||||
|
|
||||||
|
expect(blissey.hp > 0);
|
||||||
|
blissey.hp = initialHP;
|
||||||
|
|
||||||
|
// second turn
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH));
|
||||||
|
await game.phaseInterceptor.to(TurnEndPhase);
|
||||||
|
const flashFireDmg = initialHP - blissey.hp;
|
||||||
|
|
||||||
|
expect(flashFireDmg).toBeGreaterThan(originalDmg);
|
||||||
|
}, 20000);
|
||||||
|
});
|
@ -16,7 +16,7 @@ import { SPLASH_ONLY } from "#test/utils/testUtils";
|
|||||||
|
|
||||||
const TIMEOUT = 20 * 1000;
|
const TIMEOUT = 20 * 1000;
|
||||||
|
|
||||||
describe("Abilities - Protean", () => {
|
describe("Abilities - Libero", () => {
|
||||||
let phaserGame: Phaser.Game;
|
let phaserGame: Phaser.Game;
|
||||||
let game: GameManager;
|
let game: GameManager;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import { getMovePosition } from "#test/utils/gameManagerUtils";
|
|||||||
import { WeatherType } from "#app/enums/weather-type.js";
|
import { WeatherType } from "#app/enums/weather-type.js";
|
||||||
|
|
||||||
|
|
||||||
describe("Ability Timing", () => {
|
describe("Abilities - Sand Spit", () => {
|
||||||
let phaserGame: Phaser.Game;
|
let phaserGame: Phaser.Game;
|
||||||
let game: GameManager;
|
let game: GameManager;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
|||||||
import { SPLASH_ONLY } from "#test/utils/testUtils";
|
import { SPLASH_ONLY } from "#test/utils/testUtils";
|
||||||
import { Status, StatusEffect } from "#app/data/status-effect.js";
|
import { Status, StatusEffect } from "#app/data/status-effect.js";
|
||||||
|
|
||||||
describe("Test Battle Phase", () => {
|
describe("Double Battles", () => {
|
||||||
let phaserGame: Phaser.Game;
|
let phaserGame: Phaser.Game;
|
||||||
let game: GameManager;
|
let game: GameManager;
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ import { Species } from "#enums/species";
|
|||||||
import Phaser from "phaser";
|
import Phaser from "phaser";
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||||
|
|
||||||
describe("Test Battle Phase", () => {
|
describe("Error Handling", () => {
|
||||||
let phaserGame: Phaser.Game;
|
let phaserGame: Phaser.Game;
|
||||||
let game: GameManager;
|
let game: GameManager;
|
||||||
|
|
||||||
|
88
src/test/endless_boss.test.ts
Normal file
88
src/test/endless_boss.test.ts
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
import { Biome } from "#app/enums/biome";
|
||||||
|
import { Species } from "#app/enums/species";
|
||||||
|
import { GameModes } from "#app/game-mode";
|
||||||
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||||
|
import GameManager from "./utils/gameManager";
|
||||||
|
|
||||||
|
const EndlessBossWave = {
|
||||||
|
Minor: 250,
|
||||||
|
Major: 1000
|
||||||
|
};
|
||||||
|
|
||||||
|
describe("Endless Boss", () => {
|
||||||
|
let phaserGame: Phaser.Game;
|
||||||
|
let game: GameManager;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
phaserGame = new Phaser.Game({
|
||||||
|
type: Phaser.HEADLESS,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
game = new GameManager(phaserGame);
|
||||||
|
game.override
|
||||||
|
.startingBiome(Biome.END)
|
||||||
|
.disableCrits();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
game.phaseInterceptor.restoreOg();
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should spawn a minor boss every ${EndlessBossWave.Minor} waves in END biome in Endless`, async () => {
|
||||||
|
game.override.startingWave(EndlessBossWave.Minor);
|
||||||
|
await game.runToFinalBossEncounter(game, [Species.BIDOOF], GameModes.ENDLESS);
|
||||||
|
|
||||||
|
expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Minor);
|
||||||
|
expect(game.scene.arena.biomeType).toBe(Biome.END);
|
||||||
|
const eternatus = game.scene.getEnemyPokemon();
|
||||||
|
expect(eternatus?.species.speciesId).toBe(Species.ETERNATUS);
|
||||||
|
expect(eternatus?.hasPassive()).toBe(false);
|
||||||
|
expect(eternatus?.formIndex).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should spawn a major boss every ${EndlessBossWave.Major} waves in END biome in Endless`, async () => {
|
||||||
|
game.override.startingWave(EndlessBossWave.Major);
|
||||||
|
await game.runToFinalBossEncounter(game, [Species.BIDOOF], GameModes.ENDLESS);
|
||||||
|
|
||||||
|
expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Major);
|
||||||
|
expect(game.scene.arena.biomeType).toBe(Biome.END);
|
||||||
|
const eternatus = game.scene.getEnemyPokemon();
|
||||||
|
expect(eternatus?.species.speciesId).toBe(Species.ETERNATUS);
|
||||||
|
expect(eternatus?.hasPassive()).toBe(false);
|
||||||
|
expect(eternatus?.formIndex).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should spawn a minor boss every ${EndlessBossWave.Minor} waves in END biome in Spliced Endless`, async () => {
|
||||||
|
game.override.startingWave(EndlessBossWave.Minor);
|
||||||
|
await game.runToFinalBossEncounter(game, [Species.BIDOOF], GameModes.SPLICED_ENDLESS);
|
||||||
|
|
||||||
|
expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Minor);
|
||||||
|
expect(game.scene.arena.biomeType).toBe(Biome.END);
|
||||||
|
const eternatus = game.scene.getEnemyPokemon();
|
||||||
|
expect(eternatus?.species.speciesId).toBe(Species.ETERNATUS);
|
||||||
|
expect(eternatus?.hasPassive()).toBe(false);
|
||||||
|
expect(eternatus?.formIndex).toBe(0);
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should spawn a major boss every ${EndlessBossWave.Major} waves in END biome in Spliced Endless`, async () => {
|
||||||
|
game.override.startingWave(EndlessBossWave.Major);
|
||||||
|
await game.runToFinalBossEncounter(game, [Species.BIDOOF], GameModes.SPLICED_ENDLESS);
|
||||||
|
|
||||||
|
expect(game.scene.currentBattle.waveIndex).toBe(EndlessBossWave.Major);
|
||||||
|
expect(game.scene.arena.biomeType).toBe(Biome.END);
|
||||||
|
const eternatus = game.scene.getEnemyPokemon();
|
||||||
|
expect(eternatus?.species.speciesId).toBe(Species.ETERNATUS);
|
||||||
|
expect(eternatus?.hasPassive()).toBe(false);
|
||||||
|
expect(eternatus?.formIndex).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it(`should NOT spawn major or minor boss outside wave ${EndlessBossWave.Minor}s in END biome`, async () => {
|
||||||
|
game.override.startingWave(EndlessBossWave.Minor - 1);
|
||||||
|
await game.runToFinalBossEncounter(game, [Species.BIDOOF], GameModes.ENDLESS);
|
||||||
|
|
||||||
|
expect(game.scene.currentBattle.waveIndex).not.toBe(EndlessBossWave.Minor);
|
||||||
|
expect(game.scene.getEnemyPokemon()!.species.speciesId).not.toBe(Species.ETERNATUS);
|
||||||
|
});
|
||||||
|
});
|
@ -1,11 +1,8 @@
|
|||||||
import { Biome } from "#app/enums/biome.js";
|
import { Biome } from "#app/enums/biome.js";
|
||||||
import { Species } from "#app/enums/species.js";
|
import { Species } from "#app/enums/species.js";
|
||||||
import { GameModes, getGameMode } from "#app/game-mode.js";
|
|
||||||
import { EncounterPhase, SelectStarterPhase } from "#app/phases.js";
|
|
||||||
import { Mode } from "#app/ui/ui.js";
|
|
||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||||
import GameManager from "./utils/gameManager";
|
import GameManager from "./utils/gameManager";
|
||||||
import { generateStarter } from "./utils/gameManagerUtils";
|
import { GameModes } from "#app/game-mode";
|
||||||
|
|
||||||
const FinalWave = {
|
const FinalWave = {
|
||||||
Classic: 200,
|
Classic: 200,
|
||||||
@ -31,7 +28,7 @@ describe("Final Boss", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should spawn Eternatus on wave 200 in END biome", async () => {
|
it("should spawn Eternatus on wave 200 in END biome", async () => {
|
||||||
await runToFinalBossEncounter(game, [Species.BIDOOF]);
|
await game.runToFinalBossEncounter(game, [Species.BIDOOF], GameModes.CLASSIC);
|
||||||
|
|
||||||
expect(game.scene.currentBattle.waveIndex).toBe(FinalWave.Classic);
|
expect(game.scene.currentBattle.waveIndex).toBe(FinalWave.Classic);
|
||||||
expect(game.scene.arena.biomeType).toBe(Biome.END);
|
expect(game.scene.arena.biomeType).toBe(Biome.END);
|
||||||
@ -40,7 +37,7 @@ describe("Final Boss", () => {
|
|||||||
|
|
||||||
it("should NOT spawn Eternatus before wave 200 in END biome", async () => {
|
it("should NOT spawn Eternatus before wave 200 in END biome", async () => {
|
||||||
game.override.startingWave(FinalWave.Classic - 1);
|
game.override.startingWave(FinalWave.Classic - 1);
|
||||||
await runToFinalBossEncounter(game, [Species.BIDOOF]);
|
await game.runToFinalBossEncounter(game, [Species.BIDOOF], GameModes.CLASSIC);
|
||||||
|
|
||||||
expect(game.scene.currentBattle.waveIndex).not.toBe(FinalWave.Classic);
|
expect(game.scene.currentBattle.waveIndex).not.toBe(FinalWave.Classic);
|
||||||
expect(game.scene.arena.biomeType).toBe(Biome.END);
|
expect(game.scene.arena.biomeType).toBe(Biome.END);
|
||||||
@ -49,7 +46,7 @@ describe("Final Boss", () => {
|
|||||||
|
|
||||||
it("should NOT spawn Eternatus outside of END biome", async () => {
|
it("should NOT spawn Eternatus outside of END biome", async () => {
|
||||||
game.override.startingBiome(Biome.FOREST);
|
game.override.startingBiome(Biome.FOREST);
|
||||||
await runToFinalBossEncounter(game, [Species.BIDOOF]);
|
await game.runToFinalBossEncounter(game, [Species.BIDOOF], GameModes.CLASSIC);
|
||||||
|
|
||||||
expect(game.scene.currentBattle.waveIndex).toBe(FinalWave.Classic);
|
expect(game.scene.currentBattle.waveIndex).toBe(FinalWave.Classic);
|
||||||
expect(game.scene.arena.biomeType).not.toBe(Biome.END);
|
expect(game.scene.arena.biomeType).not.toBe(Biome.END);
|
||||||
@ -57,7 +54,7 @@ describe("Final Boss", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should not have passive enabled on Eternatus", async () => {
|
it("should not have passive enabled on Eternatus", async () => {
|
||||||
await runToFinalBossEncounter(game, [Species.BIDOOF]);
|
await game.runToFinalBossEncounter(game, [Species.BIDOOF], GameModes.CLASSIC);
|
||||||
|
|
||||||
const eternatus = game.scene.getEnemyPokemon();
|
const eternatus = game.scene.getEnemyPokemon();
|
||||||
expect(eternatus?.species.speciesId).toBe(Species.ETERNATUS);
|
expect(eternatus?.species.speciesId).toBe(Species.ETERNATUS);
|
||||||
@ -66,32 +63,3 @@ describe("Final Boss", () => {
|
|||||||
|
|
||||||
it.todo("should change form on direct hit down to last boss fragment", () => {});
|
it.todo("should change form on direct hit down to last boss fragment", () => {});
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
|
||||||
* Helper function to run to the final boss encounter as it's a bit tricky due to extra dialogue
|
|
||||||
* @param game - The game manager
|
|
||||||
*/
|
|
||||||
async function runToFinalBossEncounter(game: GameManager, species: Species[]) {
|
|
||||||
console.log("===to final boss encounter===");
|
|
||||||
await game.runToTitle();
|
|
||||||
|
|
||||||
game.onNextPrompt("TitlePhase", Mode.TITLE, () => {
|
|
||||||
game.scene.gameMode = getGameMode(GameModes.CLASSIC);
|
|
||||||
const starters = generateStarter(game.scene, species);
|
|
||||||
const selectStarterPhase = new SelectStarterPhase(game.scene);
|
|
||||||
game.scene.pushPhase(new EncounterPhase(game.scene, false));
|
|
||||||
selectStarterPhase.initBattle(starters);
|
|
||||||
});
|
|
||||||
|
|
||||||
game.onNextPrompt("EncounterPhase", Mode.MESSAGE, async () => {
|
|
||||||
// This will skip all entry dialogue (I can't figure out a way to sequentially handle the 8 chained messages via 1 prompt handler)
|
|
||||||
game.setMode(Mode.MESSAGE);
|
|
||||||
const encounterPhase = game.scene.getCurrentPhase() as EncounterPhase;
|
|
||||||
|
|
||||||
// No need to end phase, this will do it for you
|
|
||||||
encounterPhase.doEncounterCommon(false);
|
|
||||||
});
|
|
||||||
|
|
||||||
await game.phaseInterceptor.to(EncounterPhase, true);
|
|
||||||
console.log("===finished run to final boss encounter===");
|
|
||||||
}
|
|
||||||
|
@ -7,7 +7,7 @@ import { Moves } from "#app/enums/moves.js";
|
|||||||
import { getMovePosition } from "../utils/gameManagerUtils";
|
import { getMovePosition } from "../utils/gameManagerUtils";
|
||||||
import { MoveEffectPhase } from "#app/phases.js";
|
import { MoveEffectPhase } from "#app/phases.js";
|
||||||
|
|
||||||
describe("Internals", () => {
|
describe("Moves - Foresight", () => {
|
||||||
let phaserGame: Phaser.Game;
|
let phaserGame: Phaser.Game;
|
||||||
let game: GameManager;
|
let game: GameManager;
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ import { getMovePosition } from "../utils/gameManagerUtils";
|
|||||||
import { MoveEffectPhase } from "#app/phases.js";
|
import { MoveEffectPhase } from "#app/phases.js";
|
||||||
import { BattlerIndex } from "#app/battle.js";
|
import { BattlerIndex } from "#app/battle.js";
|
||||||
|
|
||||||
describe("Internals", () => {
|
describe("Moves - Miracle Eye", () => {
|
||||||
let phaserGame: Phaser.Game;
|
let phaserGame: Phaser.Game;
|
||||||
let game: GameManager;
|
let game: GameManager;
|
||||||
|
|
||||||
|
206
src/test/moves/parting_shot.test.ts
Normal file
206
src/test/moves/parting_shot.test.ts
Normal file
@ -0,0 +1,206 @@
|
|||||||
|
import { SPLASH_ONLY } from "../utils/testUtils";
|
||||||
|
import { BerryPhase, MessagePhase, TurnInitPhase, FaintPhase } from "#app/phases";
|
||||||
|
import { Abilities } from "#enums/abilities";
|
||||||
|
import { Moves } from "#enums/moves";
|
||||||
|
import { Species } from "#enums/species";
|
||||||
|
import Phaser from "phaser";
|
||||||
|
import { afterEach, beforeAll, beforeEach, describe, expect, test, it } from "vitest";
|
||||||
|
import GameManager from "../utils/gameManager";
|
||||||
|
import { getMovePosition } from "../utils/gameManagerUtils";
|
||||||
|
import { BattleStat } from "#app/data/battle-stat";
|
||||||
|
|
||||||
|
const TIMEOUT = 20 * 1000;
|
||||||
|
|
||||||
|
describe("Moves - Parting Shot", () => {
|
||||||
|
let phaserGame: Phaser.Game;
|
||||||
|
let game: GameManager;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
phaserGame = new Phaser.Game({
|
||||||
|
type: Phaser.HEADLESS,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
game.phaseInterceptor.restoreOg();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
game = new GameManager(phaserGame);
|
||||||
|
game.override.battleType("single");
|
||||||
|
game.override.moveset([Moves.PARTING_SHOT, Moves.SPLASH]);
|
||||||
|
game.override.enemyMoveset(SPLASH_ONLY);
|
||||||
|
game.override.startingLevel(5);
|
||||||
|
game.override.enemyLevel(5);
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
test(
|
||||||
|
"Parting Shot when buffed by prankster should fail against dark types",
|
||||||
|
async () => {
|
||||||
|
game.override
|
||||||
|
.enemySpecies(Species.POOCHYENA)
|
||||||
|
.ability(Abilities.PRANKSTER);
|
||||||
|
await game.startBattle([Species.MURKROW, Species.MEOWTH]);
|
||||||
|
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
expect(enemyPokemon).toBeDefined();
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.PARTING_SHOT));
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(BerryPhase, false);
|
||||||
|
const battleStatsOpponent = enemyPokemon.summonData.battleStats;
|
||||||
|
expect(battleStatsOpponent[BattleStat.ATK]).toBe(0);
|
||||||
|
expect(battleStatsOpponent[BattleStat.SPATK]).toBe(0);
|
||||||
|
expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
test(
|
||||||
|
"Parting shot should fail against good as gold ability",
|
||||||
|
async () => {
|
||||||
|
game.override
|
||||||
|
.enemySpecies(Species.GHOLDENGO)
|
||||||
|
.enemyAbility(Abilities.GOOD_AS_GOLD);
|
||||||
|
await game.startBattle([Species.MURKROW, Species.MEOWTH]);
|
||||||
|
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
expect(enemyPokemon).toBeDefined();
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.PARTING_SHOT));
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(BerryPhase, false);
|
||||||
|
const battleStatsOpponent = enemyPokemon.summonData.battleStats;
|
||||||
|
expect(battleStatsOpponent[BattleStat.ATK]).toBe(0);
|
||||||
|
expect(battleStatsOpponent[BattleStat.SPATK]).toBe(0);
|
||||||
|
expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
it.skip( // TODO: fix this bug to pass the test!
|
||||||
|
"Parting shot should fail if target is -6/-6 de-buffed",
|
||||||
|
async () => {
|
||||||
|
game.override.moveset([Moves.PARTING_SHOT, Moves.MEMENTO, Moves.SPLASH]);
|
||||||
|
await game.startBattle([Species.MEOWTH, Species.MEOWTH, Species.MEOWTH, Species.MURKROW, Species.ABRA]);
|
||||||
|
|
||||||
|
// use Memento 3 times to debuff enemy
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.MEMENTO));
|
||||||
|
await game.phaseInterceptor.to(FaintPhase);
|
||||||
|
expect(game.scene.getParty()[0].isFainted()).toBe(true);
|
||||||
|
game.doSelectPartyPokemon(1);
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(TurnInitPhase, false);
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.MEMENTO));
|
||||||
|
await game.phaseInterceptor.to(FaintPhase);
|
||||||
|
expect(game.scene.getParty()[0].isFainted()).toBe(true);
|
||||||
|
game.doSelectPartyPokemon(2);
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(TurnInitPhase, false);
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.MEMENTO));
|
||||||
|
await game.phaseInterceptor.to(FaintPhase);
|
||||||
|
expect(game.scene.getParty()[0].isFainted()).toBe(true);
|
||||||
|
game.doSelectPartyPokemon(3);
|
||||||
|
|
||||||
|
// set up done
|
||||||
|
await game.phaseInterceptor.to(TurnInitPhase, false);
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
expect(enemyPokemon).toBeDefined();
|
||||||
|
|
||||||
|
const battleStatsOpponent = enemyPokemon.summonData.battleStats;
|
||||||
|
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-6);
|
||||||
|
expect(battleStatsOpponent[BattleStat.SPATK]).toBe(-6);
|
||||||
|
|
||||||
|
// now parting shot should fail
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.PARTING_SHOT));
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(BerryPhase, false);
|
||||||
|
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-6);
|
||||||
|
expect(battleStatsOpponent[BattleStat.SPATK]).toBe(-6);
|
||||||
|
expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
it.skip( // TODO: fix this bug to pass the test!
|
||||||
|
"Parting shot shouldn't allow switch out when mist is active",
|
||||||
|
async () => {
|
||||||
|
game.override
|
||||||
|
.enemySpecies(Species.ALTARIA)
|
||||||
|
.enemyAbility(Abilities.NONE)
|
||||||
|
.enemyMoveset(Array(4).fill(Moves.MIST));
|
||||||
|
await game.startBattle([Species.SNORLAX, Species.MEOWTH]);
|
||||||
|
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
expect(enemyPokemon).toBeDefined();
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.PARTING_SHOT));
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(BerryPhase, false);
|
||||||
|
const battleStatsOpponent = enemyPokemon.summonData.battleStats;
|
||||||
|
expect(battleStatsOpponent[BattleStat.ATK]).toBe(0);
|
||||||
|
expect(battleStatsOpponent[BattleStat.SPATK]).toBe(0);
|
||||||
|
expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
it.skip( // TODO: fix this bug to pass the test!
|
||||||
|
"Parting shot shouldn't allow switch out against clear body ability",
|
||||||
|
async () => {
|
||||||
|
game.override
|
||||||
|
.enemySpecies(Species.TENTACOOL)
|
||||||
|
.enemyAbility(Abilities.CLEAR_BODY);
|
||||||
|
await game.startBattle([Species.SNORLAX, Species.MEOWTH]);
|
||||||
|
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
expect(enemyPokemon).toBeDefined();
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.PARTING_SHOT));
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(BerryPhase, false);
|
||||||
|
const battleStatsOpponent = enemyPokemon.summonData.battleStats;
|
||||||
|
expect(battleStatsOpponent[BattleStat.ATK]).toBe(0);
|
||||||
|
expect(battleStatsOpponent[BattleStat.SPATK]).toBe(0);
|
||||||
|
expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
it.skip( // TODO: fix this bug to pass the test!
|
||||||
|
"Parting shot should de-buff and not fail if no party available to switch - party size 1",
|
||||||
|
async () => {
|
||||||
|
await game.startBattle([Species.MURKROW]);
|
||||||
|
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
expect(enemyPokemon).toBeDefined();
|
||||||
|
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.PARTING_SHOT));
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(BerryPhase, false);
|
||||||
|
const battleStatsOpponent = enemyPokemon.summonData.battleStats;
|
||||||
|
expect(battleStatsOpponent[BattleStat.ATK]).toBe(-1);
|
||||||
|
expect(battleStatsOpponent[BattleStat.SPATK]).toBe(-1);
|
||||||
|
expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MURKROW);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
|
||||||
|
it.skip( // TODO: fix this bug to pass the test!
|
||||||
|
"Parting shot regularly not fail if no party available to switch - party fainted",
|
||||||
|
async () => {
|
||||||
|
await game.startBattle([Species.MURKROW, Species.MEOWTH]);
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH));
|
||||||
|
|
||||||
|
// intentionally kill party pokemon, switch to second slot (now 1 party mon is fainted)
|
||||||
|
await game.killPokemon(game.scene.getParty()[0]);
|
||||||
|
expect(game.scene.getParty()[0].isFainted()).toBe(true);
|
||||||
|
await game.phaseInterceptor.run(MessagePhase);
|
||||||
|
game.doSelectPartyPokemon(1);
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(TurnInitPhase, false);
|
||||||
|
game.doAttack(getMovePosition(game.scene, 0, Moves.PARTING_SHOT));
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(BerryPhase, false);
|
||||||
|
const battleStatsOpponent = game.scene.currentBattle.enemyParty[0].summonData.battleStats;
|
||||||
|
expect(battleStatsOpponent[BattleStat.ATK]).toBe(0);
|
||||||
|
expect(battleStatsOpponent[BattleStat.SPATK]).toBe(0);
|
||||||
|
expect(game.scene.getPlayerField()[0].species.speciesId).toBe(Species.MEOWTH);
|
||||||
|
}, TIMEOUT
|
||||||
|
);
|
||||||
|
});
|
@ -10,7 +10,7 @@ import Phaser from "phaser";
|
|||||||
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
|
||||||
import { SPLASH_ONLY } from "#test/utils/testUtils";
|
import { SPLASH_ONLY } from "#test/utils/testUtils";
|
||||||
|
|
||||||
describe("Abilities - Wind Rider", () => {
|
describe("Moves - Tailwind", () => {
|
||||||
let phaserGame: Phaser.Game;
|
let phaserGame: Phaser.Game;
|
||||||
let game: GameManager;
|
let game: GameManager;
|
||||||
|
|
||||||
|
@ -1,50 +1,69 @@
|
|||||||
<!DOCTYPE html><body>
|
<!DOCTYPE html><body>
|
||||||
<div id="touchControls">
|
<div id="touchControls">
|
||||||
<div id="dpad" class="unselectable">
|
<div class="left">
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72">
|
<div id="control-group-dpad" class="control-group control-group-dpad">
|
||||||
<path id="dpadUp" data-key="UP" d="M48,5.8C48,2.5,45.4,0,42,0H29.9C26.6,0,24,2.4,24,5.8V24h24V5.8z" />
|
<div id="dpad" data-control-key="DPAD">
|
||||||
<path id="dpadRight" data-key="RIGHT" d="M66.2,24H48v24h18.2c3.3,0,5.8-2.7,5.8-6V29.9C72,26.5,69.5,24,66.2,24z" />
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72">
|
||||||
<path id="dpadDown" data-key="DOWN" d="M24,66.3c0,3.3,2.6,5.7,5.9,5.7H42c3.3,0,6-2.4,6-5.7V48H24V66.3z" />
|
<path id="dpadUp" data-key="UP"
|
||||||
<path id="dpadLeft" data-key="LEFT" d="M5.7,24C2.4,24,0,26.5,0,29.9V42c0,3.3,2.3,6,5.7,6H24V24H5.7z" />
|
d="M48,5.8C48,2.5,45.4,0,42,0H29.9C26.6,0,24,2.4,24,5.8V24h24V5.8z" />
|
||||||
<rect id="dpadCenter" x="24" y="24" width="24" height="24" />
|
<path id="dpadRight" data-key="RIGHT"
|
||||||
</svg>
|
d="M66.2,24H48v24h18.2c3.3,0,5.8-2.7,5.8-6V29.9C72,26.5,69.5,24,66.2,24z" />
|
||||||
|
<path id="dpadDown" data-key="DOWN"
|
||||||
|
d="M24,66.3c0,3.3,2.6,5.7,5.9,5.7H42c3.3,0,6-2.4,6-5.7V48H24V66.3z" />
|
||||||
|
<path id="dpadLeft" data-key="LEFT"
|
||||||
|
d="M5.7,24C2.4,24,0,26.5,0,29.9V42c0,3.3,2.3,6,5.7,6H24V24H5.7z" />
|
||||||
|
<rect id="dpadCenter" x="24" y="24" width="24" height="24" />
|
||||||
|
</svg>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="apad" class="unselectable">
|
<div class="right">
|
||||||
<div id="apadAction" class="apadCircBtn apadBtn" data-key="ACTION">
|
<div id="control-group-action" class="control-group">
|
||||||
<text id="apadLabelAction" class="apadLabel">A</text>
|
<div id="apadAction" class="apad-button apad-circle" data-key="ACTION">
|
||||||
</div>
|
<span class="apad-label">A</span>
|
||||||
<div id="apadCancel" class="apadCircBtn apadBtn" data-key="CANCEL">
|
|
||||||
<text id="apadLabelCancel" class="apadLabel">B</text>
|
|
||||||
</div>
|
|
||||||
<div class="apadBtnContainer apadRectBtnContainer">
|
|
||||||
<div id="apadCycleShiny" class="apadSqBtn apadBtn" data-key="CYCLE_SHINY">
|
|
||||||
<text class="apadLabel apadLabelSmall">R</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadCycleVariant" class="apadSqBtn apadBtn" data-key="CYCLE_VARIANT">
|
|
||||||
<text class="apadLabel apadLabelSmall">V</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadStats" class="apadRectBtn apadBtn" data-key="STATS">
|
|
||||||
<text class="apadLabel apadLabelSmall">C</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadMenu" class="apadRectBtn apadBtn" data-key="MENU">
|
|
||||||
<text class="apadLabel apadLabelSmall">Menu</text>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="apadBtnContainer apadSqBtnContainer">
|
|
||||||
<div id="apadCycleForm" class="apadSqBtn apadBtn" data-key="CYCLE_FORM">
|
<div id="control-group-cancel" class="control-group">
|
||||||
<text class="apadLabel apadLabelSmall">F</text>
|
<div id="apadCancel" class="apad-button apad-circle" data-key="CANCEL">
|
||||||
</div>
|
<span class="apad-label">B</span>
|
||||||
<div id="apadCycleGender" class="apadSqBtn apadBtn" data-key="CYCLE_GENDER">
|
|
||||||
<text class="apadLabel apadLabelSmall">G</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadCycleAbility" class="apadSqBtn apadBtn" data-key="CYCLE_ABILITY">
|
|
||||||
<text class="apadLabel apadLabelSmall">E</text>
|
|
||||||
</div>
|
|
||||||
<div id="apadCycleNature" class="apadSqBtn apadBtn" data-key="CYCLE_NATURE">
|
|
||||||
<text class="apadLabel apadLabelSmall">N</text>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div id="control-group-extra-1" class="control-group control-group-extra">
|
||||||
|
<div id="apadCycleShiny" class="apad-button apad-square apad-small" data-key="CYCLE_SHINY">
|
||||||
|
<span class="apad-label">R</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadCycleVariant" class="apad-button apad-square apad-small" data-key="V">
|
||||||
|
<span class="apad-label">V</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadStats" class="apad-button apad-rectangle apad-small" data-key="STATS">
|
||||||
|
<span class="apad-label">C</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadMenu" class="apad-button apad-rectangle apad-small" data-key="MENU">
|
||||||
|
<span class="apad-label">Menu</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="control-group-extra-2" class="control-group control-group-extra">
|
||||||
|
<div id="apadCycleForm" class="apad-button apad-square apad-small" data-key="CYCLE_FORM">
|
||||||
|
<span class="apad-label">F</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadCycleGender" class="apad-button apad-square apad-small" data-key="CYCLE_GENDER">
|
||||||
|
<span class="apad-label">G</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadCycleAbility" class="apad-button apad-square apad-small" data-key="CYCLE_ABILITY">
|
||||||
|
<span class="apad-label">E</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadCycleNature" class="apad-button apad-square apad-small" data-key="CYCLE_NATURE">
|
||||||
|
<span class="apad-label">N</span>
|
||||||
|
</div>
|
||||||
|
<div id="apadInfo" class="apad-button apad-rectangle apad-small" data-key="V">
|
||||||
|
<span class="apad-label">V</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
@ -26,7 +26,6 @@ import TargetSelectUiHandler from "#app/ui/target-select-ui-handler.js";
|
|||||||
import { OverridesHelper } from "./overridesHelper";
|
import { OverridesHelper } from "./overridesHelper";
|
||||||
import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type.js";
|
import { ModifierTypeOption, modifierTypes } from "#app/modifier/modifier-type.js";
|
||||||
import overrides from "#app/overrides.js";
|
import overrides from "#app/overrides.js";
|
||||||
import { removeEnemyHeldItems } from "./testUtils";
|
|
||||||
import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler.js";
|
import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler.js";
|
||||||
import { MoveHelper } from "./moveHelper";
|
import { MoveHelper } from "./moveHelper";
|
||||||
import { vi } from "vitest";
|
import { vi } from "vitest";
|
||||||
@ -137,10 +136,42 @@ export default class GameManager {
|
|||||||
|
|
||||||
await this.phaseInterceptor.run(EncounterPhase);
|
await this.phaseInterceptor.run(EncounterPhase);
|
||||||
if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0) {
|
if (overrides.OPP_HELD_ITEMS_OVERRIDE.length === 0) {
|
||||||
removeEnemyHeldItems(this);
|
this.removeEnemyHeldItems();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper function to run to the final boss encounter as it's a bit tricky due to extra dialogue
|
||||||
|
* Also handles Major/Minor bosses from endless modes
|
||||||
|
* @param game - The game manager
|
||||||
|
* @param species
|
||||||
|
* @param mode
|
||||||
|
*/
|
||||||
|
async runToFinalBossEncounter(game: GameManager, species: Species[], mode: GameModes) {
|
||||||
|
console.log("===to final boss encounter===");
|
||||||
|
await game.runToTitle();
|
||||||
|
|
||||||
|
game.onNextPrompt("TitlePhase", Mode.TITLE, () => {
|
||||||
|
game.scene.gameMode = getGameMode(mode);
|
||||||
|
const starters = generateStarter(game.scene, species);
|
||||||
|
const selectStarterPhase = new SelectStarterPhase(game.scene);
|
||||||
|
game.scene.pushPhase(new EncounterPhase(game.scene, false));
|
||||||
|
selectStarterPhase.initBattle(starters);
|
||||||
|
});
|
||||||
|
|
||||||
|
game.onNextPrompt("EncounterPhase", Mode.MESSAGE, async () => {
|
||||||
|
// This will skip all entry dialogue (I can't figure out a way to sequentially handle the 8 chained messages via 1 prompt handler)
|
||||||
|
game.setMode(Mode.MESSAGE);
|
||||||
|
const encounterPhase = game.scene.getCurrentPhase() as EncounterPhase;
|
||||||
|
|
||||||
|
// No need to end phase, this will do it for you
|
||||||
|
encounterPhase.doEncounterCommon(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to(EncounterPhase, true);
|
||||||
|
console.log("===finished run to final boss encounter===");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Transitions to the start of a battle.
|
* Transitions to the start of a battle.
|
||||||
* @param species - Optional array of species to start the battle with.
|
* @param species - Optional array of species to start the battle with.
|
||||||
@ -373,4 +404,13 @@ export default class GameManager {
|
|||||||
|
|
||||||
vi.spyOn(this.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue(order);
|
vi.spyOn(this.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue(order);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Removes all held items from enemy pokemon
|
||||||
|
*/
|
||||||
|
removeEnemyHeldItems(): void {
|
||||||
|
this.scene.clearEnemyHeldItemModifiers();
|
||||||
|
this.scene.clearEnemyModifiers();
|
||||||
|
console.log("Enemy held items removed");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -89,6 +89,7 @@ export default class GameWrapper {
|
|||||||
frames: {},
|
frames: {},
|
||||||
});
|
});
|
||||||
Pokemon.prototype.enableMask = () => null;
|
Pokemon.prototype.enableMask = () => null;
|
||||||
|
Pokemon.prototype.updateFusionPalette = () => null;
|
||||||
}
|
}
|
||||||
|
|
||||||
setScene(scene: BattleScene) {
|
setScene(scene: BattleScene) {
|
||||||
@ -128,7 +129,9 @@ export default class GameWrapper {
|
|||||||
manager: {
|
manager: {
|
||||||
game: this.game,
|
game: this.game,
|
||||||
},
|
},
|
||||||
|
destroy: () => null,
|
||||||
setVolume: () => null,
|
setVolume: () => null,
|
||||||
|
stop: () => null,
|
||||||
stopByKey: () => null,
|
stopByKey: () => null,
|
||||||
on: (evt, callback) => callback(),
|
on: (evt, callback) => callback(),
|
||||||
key: "",
|
key: "",
|
||||||
@ -202,6 +205,7 @@ export default class GameWrapper {
|
|||||||
};
|
};
|
||||||
const mockTextureManager = new MockTextureManager(this.scene);
|
const mockTextureManager = new MockTextureManager(this.scene);
|
||||||
this.scene.add = mockTextureManager.add;
|
this.scene.add = mockTextureManager.add;
|
||||||
|
this.scene.textures = mockTextureManager;
|
||||||
this.scene.sys.displayList = this.scene.add.displayList;
|
this.scene.sys.displayList = this.scene.add.displayList;
|
||||||
this.scene.sys.updateList = new UpdateList(this.scene);
|
this.scene.sys.updateList = new UpdateList(this.scene);
|
||||||
this.scene.systems = this.scene.sys;
|
this.scene.systems = this.scene.sys;
|
||||||
|
@ -6,8 +6,11 @@ import MockImage from "#test/utils/mocks/mocksContainer/mockImage";
|
|||||||
import MockText from "#test/utils/mocks/mocksContainer/mockText";
|
import MockText from "#test/utils/mocks/mocksContainer/mockText";
|
||||||
import MockPolygon from "#test/utils/mocks/mocksContainer/mockPolygon";
|
import MockPolygon from "#test/utils/mocks/mocksContainer/mockPolygon";
|
||||||
import { MockGameObject } from "./mockGameObject";
|
import { MockGameObject } from "./mockGameObject";
|
||||||
|
import MockTexture from "#test/utils/mocks/mocksContainer/mockTexture";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stub class for Phaser.Textures.TextureManager
|
||||||
|
*/
|
||||||
export default class MockTextureManager {
|
export default class MockTextureManager {
|
||||||
private textures: Map<string, any>;
|
private textures: Map<string, any>;
|
||||||
private scene;
|
private scene;
|
||||||
@ -54,6 +57,14 @@ export default class MockTextureManager {
|
|||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a mock texture
|
||||||
|
* @param key
|
||||||
|
*/
|
||||||
|
get(key) {
|
||||||
|
return new MockTexture(this, key, null);
|
||||||
|
}
|
||||||
|
|
||||||
rectangle(x, y, width, height, fillColor) {
|
rectangle(x, y, width, height, fillColor) {
|
||||||
const rectangle = new MockRectangle(this, x, y, width, height, fillColor);
|
const rectangle = new MockRectangle(this, x, y, width, height, fillColor);
|
||||||
this.list.push(rectangle);
|
this.list.push(rectangle);
|
||||||
|
42
src/test/utils/mocks/mocksContainer/mockTexture.ts
Normal file
42
src/test/utils/mocks/mocksContainer/mockTexture.ts
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import { MockGameObject } from "../mockGameObject";
|
||||||
|
import MockTextureManager from "#test/utils/mocks/mockTextureManager";
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stub for Phaser.Textures.Texture object
|
||||||
|
* Just mocks the function calls and data required for use in tests
|
||||||
|
*/
|
||||||
|
export default class MockTexture implements MockGameObject {
|
||||||
|
public manager: MockTextureManager;
|
||||||
|
public key: string;
|
||||||
|
public source;
|
||||||
|
public frames: object;
|
||||||
|
public firstFrame: string;
|
||||||
|
|
||||||
|
constructor(manager, key: string, source) {
|
||||||
|
this.manager = manager;
|
||||||
|
this.key = key;
|
||||||
|
this.source = source;
|
||||||
|
|
||||||
|
const mockFrame = {
|
||||||
|
width: 100,
|
||||||
|
height: 100,
|
||||||
|
cutX: 0,
|
||||||
|
cutY: 0
|
||||||
|
};
|
||||||
|
this.frames = {
|
||||||
|
firstFrame: mockFrame,
|
||||||
|
0: mockFrame,
|
||||||
|
1: mockFrame,
|
||||||
|
2: mockFrame,
|
||||||
|
3: mockFrame,
|
||||||
|
4: mockFrame
|
||||||
|
};
|
||||||
|
this.firstFrame = "firstFrame";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Mocks the function call that gets an HTMLImageElement, see {@link Pokemon.updateFusionPalette} */
|
||||||
|
getSourceImage() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
import { Moves } from "#app/enums/moves.js";
|
import { Moves } from "#app/enums/moves.js";
|
||||||
import i18next, { type ParseKeys } from "i18next";
|
import i18next, { type ParseKeys } from "i18next";
|
||||||
import { vi } from "vitest";
|
import { vi } from "vitest";
|
||||||
import GameManager from "./gameManager";
|
|
||||||
|
|
||||||
/** Ready to use array of Moves.SPLASH x4 */
|
/** Ready to use array of Moves.SPLASH x4 */
|
||||||
export const SPLASH_ONLY = [Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH];
|
export const SPLASH_ONLY = [Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH];
|
||||||
@ -26,13 +25,3 @@ export function mockI18next() {
|
|||||||
export function arrayOfRange(start: integer, end: integer) {
|
export function arrayOfRange(start: integer, end: integer) {
|
||||||
return Array.from({ length: end - start }, (_v, k) => k + start);
|
return Array.from({ length: end - start }, (_v, k) => k + start);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes all held items from enemy pokemon
|
|
||||||
* @param game The {@link GameManager} instance
|
|
||||||
*/
|
|
||||||
export function removeEnemyHeldItems(game: GameManager): void {
|
|
||||||
game.scene.clearEnemyHeldItemModifiers();
|
|
||||||
game.scene.clearEnemyModifiers();
|
|
||||||
console.log("Enemy held items removed");
|
|
||||||
}
|
|
||||||
|
@ -8,18 +8,38 @@ export default class TouchControl {
|
|||||||
events: EventEmitter;
|
events: EventEmitter;
|
||||||
private buttonLock: string[] = new Array();
|
private buttonLock: string[] = new Array();
|
||||||
private inputInterval: NodeJS.Timeout[] = new Array();
|
private inputInterval: NodeJS.Timeout[] = new Array();
|
||||||
|
/** Whether touch controls are disabled */
|
||||||
|
private disabled: boolean = false;
|
||||||
|
/** Whether the last touch event has finished before disabling */
|
||||||
|
private finishedLastTouch: boolean = false;
|
||||||
|
|
||||||
constructor(scene: BattleScene) {
|
constructor(scene: BattleScene) {
|
||||||
this.events = scene.game.events;
|
this.events = scene.game.events;
|
||||||
this.init();
|
this.init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disable touch controls
|
||||||
|
*/
|
||||||
|
disable() {
|
||||||
|
this.disabled = true;
|
||||||
|
this.finishedLastTouch = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable touch controls
|
||||||
|
*/
|
||||||
|
enable() {
|
||||||
|
this.disabled = false;
|
||||||
|
this.finishedLastTouch = false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initialize touch controls by binding keys to buttons.
|
* Initialize touch controls by binding keys to buttons.
|
||||||
*/
|
*/
|
||||||
init() {
|
init() {
|
||||||
this.preventElementZoom(document.querySelector("#dpad"));
|
this.preventElementZoom(document.querySelector("#dpad"));
|
||||||
this.preventElementZoom(document.querySelector("#apad"));
|
document.querySelectorAll(".apad-button").forEach((element) => this.preventElementZoom(element as HTMLElement));
|
||||||
// Select all elements with the 'data-key' attribute and bind keys to them
|
// Select all elements with the 'data-key' attribute and bind keys to them
|
||||||
for (const button of document.querySelectorAll("[data-key]")) {
|
for (const button of document.querySelectorAll("[data-key]")) {
|
||||||
// @ts-ignore - Bind the key to the button using the dataset key
|
// @ts-ignore - Bind the key to the button using the dataset key
|
||||||
@ -56,10 +76,14 @@ export default class TouchControl {
|
|||||||
if (this.buttonLock.includes(key)) {
|
if (this.buttonLock.includes(key)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.simulateKeyboardEvent("keydown", key);
|
if (!this.simulateKeyboardEvent("keydown", key)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
clearInterval(this.inputInterval[key]);
|
clearInterval(this.inputInterval[key]);
|
||||||
this.inputInterval[key] = setInterval(() => {
|
this.inputInterval[key] = setInterval(() => {
|
||||||
this.simulateKeyboardEvent("keydown", key);
|
if (!this.simulateKeyboardEvent("keydown", key)) {
|
||||||
|
clearInterval(this.inputInterval[key]);
|
||||||
|
}
|
||||||
}, repeatInputDelayMillis);
|
}, repeatInputDelayMillis);
|
||||||
this.buttonLock.push(key);
|
this.buttonLock.push(key);
|
||||||
node.classList.add("active");
|
node.classList.add("active");
|
||||||
@ -67,11 +91,11 @@ export default class TouchControl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
touchButtonUp(node: HTMLElement, key: string, id: string) {
|
touchButtonUp(node: HTMLElement, key: string, id: string) {
|
||||||
if (!this.buttonLock.includes(key)) {
|
if (!this.buttonLock.includes(key) || this.disabled && this.finishedLastTouch) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.finishedLastTouch = true;
|
||||||
this.simulateKeyboardEvent("keyup", key);
|
this.simulateKeyboardEvent("keyup", key);
|
||||||
|
|
||||||
node.classList.remove("active");
|
node.classList.remove("active");
|
||||||
|
|
||||||
document.getElementById(id)?.classList.remove("active");
|
document.getElementById(id)?.classList.remove("active");
|
||||||
@ -81,18 +105,19 @@ export default class TouchControl {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Simulates a keyboard event on the canvas.
|
* Simulates a keyboard event on the canvas if the button is not disabled.
|
||||||
*
|
*
|
||||||
* @param eventType - The type of the keyboard event ('keydown' or 'keyup').
|
* @param eventType - The type of the keyboard event ('keydown' or 'keyup').
|
||||||
* @param key - The key to simulate.
|
* @param key - The key to simulate.
|
||||||
*
|
* @returns Whether the simulation was successful.
|
||||||
* @remarks
|
* @remarks
|
||||||
* This function checks if the key exists in the Button enum. If it does, it retrieves the corresponding button
|
* This function checks if the key exists in the Button enum. If it does, it retrieves the corresponding button
|
||||||
* and emits the appropriate event ('input_down' or 'input_up') based on the event type.
|
* and emits the appropriate event ('input_down' or 'input_up') based on the event type.
|
||||||
*/
|
*/
|
||||||
simulateKeyboardEvent(eventType: string, key: string) {
|
simulateKeyboardEvent(eventType: string, key: string): boolean {
|
||||||
if (!Button.hasOwnProperty(key)) {
|
console.log("simulateKeyboardEvent", eventType, key);
|
||||||
return;
|
if (!Button.hasOwnProperty(key) || this.disabled) {
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
const button = Button[key];
|
const button = Button[key];
|
||||||
|
|
||||||
@ -112,6 +137,7 @@ export default class TouchControl {
|
|||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -7,7 +7,8 @@ import i18next from "i18next";
|
|||||||
export enum DropDownState {
|
export enum DropDownState {
|
||||||
ON = 0,
|
ON = 0,
|
||||||
OFF = 1,
|
OFF = 1,
|
||||||
EXCLUDE = 2
|
EXCLUDE = 2,
|
||||||
|
UNLOCKABLE = 3
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum DropDownType {
|
export enum DropDownType {
|
||||||
@ -46,6 +47,7 @@ export class DropDownOption extends Phaser.GameObjects.Container {
|
|||||||
private onColor = 0x33bbff;
|
private onColor = 0x33bbff;
|
||||||
private offColor = 0x272727;
|
private offColor = 0x272727;
|
||||||
private excludeColor = 0xff5555;
|
private excludeColor = 0xff5555;
|
||||||
|
private unlockableColor = 0xffff00;
|
||||||
|
|
||||||
constructor(scene: SceneBase, val: any, labels: DropDownLabel | DropDownLabel[]) {
|
constructor(scene: SceneBase, val: any, labels: DropDownLabel | DropDownLabel[]) {
|
||||||
super(scene);
|
super(scene);
|
||||||
@ -114,6 +116,9 @@ export class DropDownOption extends Phaser.GameObjects.Container {
|
|||||||
case DropDownState.EXCLUDE:
|
case DropDownState.EXCLUDE:
|
||||||
this.toggle.setTint(this.excludeColor);
|
this.toggle.setTint(this.excludeColor);
|
||||||
break;
|
break;
|
||||||
|
case DropDownState.UNLOCKABLE:
|
||||||
|
this.toggle.setTint(this.unlockableColor);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@ import { addWindow } from "../ui-theme";
|
|||||||
import {Button} from "#enums/buttons";
|
import {Button} from "#enums/buttons";
|
||||||
import {InputsIcons} from "#app/ui/settings/abstract-control-settings-ui-handler.js";
|
import {InputsIcons} from "#app/ui/settings/abstract-control-settings-ui-handler.js";
|
||||||
import NavigationMenu, {NavigationManager} from "#app/ui/settings/navigationMenu";
|
import NavigationMenu, {NavigationManager} from "#app/ui/settings/navigationMenu";
|
||||||
import { Setting, SettingKeys } from "#app/system/settings/settings";
|
import { Setting, SettingKeys, SettingType } from "#app/system/settings/settings";
|
||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
|
|
||||||
|
|
||||||
@ -40,9 +40,9 @@ export default class AbstractSettingsUiHandler extends UiHandler {
|
|||||||
protected settings: Array<Setting>;
|
protected settings: Array<Setting>;
|
||||||
protected localStorageKey: string;
|
protected localStorageKey: string;
|
||||||
|
|
||||||
constructor(scene: BattleScene, mode: Mode | null = null) {
|
constructor(scene: BattleScene, type: SettingType, mode: Mode | null = null) {
|
||||||
super(scene, mode);
|
super(scene, mode);
|
||||||
|
this.settings = Setting.filter(s => s.type === type && !s?.isHidden?.());
|
||||||
this.reloadRequired = false;
|
this.reloadRequired = false;
|
||||||
this.rowsToDisplay = 8;
|
this.rowsToDisplay = 8;
|
||||||
}
|
}
|
||||||
@ -264,6 +264,12 @@ export default class AbstractSettingsUiHandler extends UiHandler {
|
|||||||
case Button.CYCLE_SHINY:
|
case Button.CYCLE_SHINY:
|
||||||
success = this.navigationContainer.navigate(button);
|
success = this.navigationContainer.navigate(button);
|
||||||
break;
|
break;
|
||||||
|
case Button.ACTION:
|
||||||
|
const setting: Setting = this.settings[cursor];
|
||||||
|
if (setting?.activatable) {
|
||||||
|
success = this.activateSetting(setting);
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,6 +281,20 @@ export default class AbstractSettingsUiHandler extends UiHandler {
|
|||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Activate the specified setting if it is activatable.
|
||||||
|
* @param setting The setting to activate.
|
||||||
|
* @returns Whether the setting was successfully activated.
|
||||||
|
*/
|
||||||
|
activateSetting(setting: Setting): boolean {
|
||||||
|
switch (setting.key) {
|
||||||
|
case SettingKeys.Move_Touch_Controls:
|
||||||
|
this.scene.inputController.moveTouchControlsHandler.enableConfigurationMode(this.getUi(), this.scene);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the cursor to the specified position.
|
* Set the cursor to the specified position.
|
||||||
*
|
*
|
||||||
|
380
src/ui/settings/move-touch-controls-handler.ts
Normal file
380
src/ui/settings/move-touch-controls-handler.ts
Normal file
@ -0,0 +1,380 @@
|
|||||||
|
import TouchControl from "#app/touch-controls.js";
|
||||||
|
import UI from "#app/ui/ui.js";
|
||||||
|
import { Scene } from "phaser";
|
||||||
|
|
||||||
|
export const TOUCH_CONTROL_POSITIONS_LANDSCAPE = "touchControlPositionsLandscape";
|
||||||
|
export const TOUCH_CONTROL_POSITIONS_PORTRAIT = "touchControlPositionsPortrait";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
type ControlPosition = { id: string, x: number, y: number };
|
||||||
|
|
||||||
|
type ConfigurationEventListeners = {
|
||||||
|
"touchstart": EventListener[]
|
||||||
|
"touchmove": EventListener[]
|
||||||
|
"touchend": EventListener[]
|
||||||
|
};
|
||||||
|
|
||||||
|
type ToolbarRefs = {
|
||||||
|
toolbar: HTMLDivElement,
|
||||||
|
saveButton: HTMLDivElement
|
||||||
|
resetButton: HTMLDivElement
|
||||||
|
cancelButton: HTMLDivElement
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles the dragging of touch controls around the screen.
|
||||||
|
*/
|
||||||
|
export default class MoveTouchControlsHandler {
|
||||||
|
|
||||||
|
/** The element that is currently being dragged */
|
||||||
|
private draggingElement: HTMLElement | null = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Whether the user is currently configuring the touch controls.
|
||||||
|
* When this is true, the touch controls can be dragged around the screen and the controls of the game are disabled.
|
||||||
|
*/
|
||||||
|
public inConfigurationMode: boolean;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The event listeners for the configuration mode.
|
||||||
|
* These are used to remove the event listeners when the configuration mode is disabled.
|
||||||
|
*/
|
||||||
|
private configurationEventListeners: ConfigurationEventListeners = {
|
||||||
|
"touchstart": [],
|
||||||
|
"touchmove": [],
|
||||||
|
"touchend": []
|
||||||
|
};
|
||||||
|
|
||||||
|
private overlay: Phaser.GameObjects.Container;
|
||||||
|
|
||||||
|
private isLandscapeMode: boolean = this.getScreenSize().width > this.getScreenSize().height;
|
||||||
|
private touchControls: TouchControl;
|
||||||
|
|
||||||
|
constructor(touchControls: TouchControl) {
|
||||||
|
this.touchControls = touchControls;
|
||||||
|
this.inConfigurationMode = false;
|
||||||
|
this.setPositions(this.getSavedPositionsOfCurrentOrientation() ?? []);
|
||||||
|
window.addEventListener("resize", (event) => {
|
||||||
|
const screenSize = this.getScreenSize();
|
||||||
|
if (screenSize.width > screenSize.height !== this.isLandscapeMode) {
|
||||||
|
this.changeOrientation(screenSize.width > screenSize.height);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the state of the touch controls to the given orientation.
|
||||||
|
* @param isLandscapeMode Whether the screen is in landscape mode.
|
||||||
|
*/
|
||||||
|
private async changeOrientation(isLandscapeMode: boolean) {
|
||||||
|
this.isLandscapeMode = isLandscapeMode;
|
||||||
|
if (this.inConfigurationMode) {
|
||||||
|
const orientation = document.querySelector("#touchControls #orientation");
|
||||||
|
if (orientation) {
|
||||||
|
orientation.textContent = this.isLandscapeMode? "Landscape" : "Portrait";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const positions = this.getSavedPositionsOfCurrentOrientation() ?? [];
|
||||||
|
this.setPositions(positions);
|
||||||
|
}
|
||||||
|
|
||||||
|
private getScreenSize() {
|
||||||
|
return { width: window.screen.width, height: window.screen.height };
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the toolbar element for the configuration mode.
|
||||||
|
* @returns A new div element that contains the toolbar for the configuration mode.
|
||||||
|
*/
|
||||||
|
private createToolbarElement(): HTMLDivElement {
|
||||||
|
const toolbar = document.createElement("div");
|
||||||
|
toolbar.id = "configToolbar";
|
||||||
|
toolbar.innerHTML = `
|
||||||
|
<div class="column">
|
||||||
|
<div class="button-row">
|
||||||
|
<div id="resetButton" class="button">Reset</div>
|
||||||
|
<div id="saveButton" class="button">Save & close</div>
|
||||||
|
<div id="cancelButton" class="button">Cancel</div>
|
||||||
|
</div>
|
||||||
|
<div class="info-row">
|
||||||
|
<div class="orientation-label">
|
||||||
|
Orientation: <span id="orientation">${this.isLandscapeMode ? "Landscape" : "Portrait"}</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
return toolbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the toolbar of the configuration mode.
|
||||||
|
* Places its elements at the top of the touch controls and adds event listeners to them.
|
||||||
|
*/
|
||||||
|
private createToolbar() {
|
||||||
|
document.querySelector("#touchControls")?.prepend(this.createToolbarElement());
|
||||||
|
const refs = this.getConfigToolbarRefs();
|
||||||
|
if (!refs) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const { saveButton, resetButton, cancelButton } = refs;
|
||||||
|
|
||||||
|
saveButton.addEventListener("click", () => {
|
||||||
|
this.saveCurrentPositions();
|
||||||
|
this.disableConfigurationMode();
|
||||||
|
});
|
||||||
|
resetButton.addEventListener("click", () => {
|
||||||
|
this.resetPositions();
|
||||||
|
});
|
||||||
|
cancelButton.addEventListener("click", () => {
|
||||||
|
const positions = this.getSavedPositionsOfCurrentOrientation();
|
||||||
|
this.setPositions(positions);
|
||||||
|
this.disableConfigurationMode();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the references to the elements of the configuration toolbar.
|
||||||
|
* @returns The references to the elements of the configuration toolbar
|
||||||
|
* or undefined if the elements can not be found (e.g. during tests)
|
||||||
|
*/
|
||||||
|
private getConfigToolbarRefs(): ToolbarRefs | undefined {
|
||||||
|
const toolbar = document.querySelector("#touchControls #configToolbar") as HTMLDivElement;
|
||||||
|
if (!toolbar) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
toolbar,
|
||||||
|
saveButton: toolbar.querySelector("#saveButton")!,
|
||||||
|
resetButton: toolbar.querySelector("#resetButton")!,
|
||||||
|
cancelButton: toolbar.querySelector("#cancelButton")!
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Elements that are inside the left div are anchored to the left boundary of the screen.
|
||||||
|
* The x value of the positions are considered offsets to their respective boundaries.
|
||||||
|
* @param element Either an element in the left div or the right div.
|
||||||
|
* @returns Whether the given element is inside the left div.
|
||||||
|
*/
|
||||||
|
private isLeft = (element: HTMLElement) => document.querySelector("#touchControls .left")?.contains(element);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Start dragging the given button.
|
||||||
|
* @param controlGroup The button that is being dragged.
|
||||||
|
* @param touch The touch event that started the drag.
|
||||||
|
*/
|
||||||
|
private startDrag = (controlGroup: HTMLElement): void => {
|
||||||
|
this.draggingElement = controlGroup;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Drags the currently dragged element to the given touch position.
|
||||||
|
* @param touch The touch event that is currently happening.
|
||||||
|
* @param isLeft Whether the dragged element is a left button.
|
||||||
|
*/
|
||||||
|
private drag = (touch: Touch): void => {
|
||||||
|
if (!this.draggingElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const rect = this.draggingElement.getBoundingClientRect();
|
||||||
|
// Map the touch position to the center of the dragged element.
|
||||||
|
const xOffset = this.isLeft(this.draggingElement) ? touch.clientX - rect.width / 2 : window.innerWidth - touch.clientX - rect.width / 2;
|
||||||
|
const yOffset = window.innerHeight - touch.clientY - rect.height / 2;
|
||||||
|
this.setPosition(this.draggingElement, xOffset, yOffset);
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops dragging the currently dragged element.
|
||||||
|
*/
|
||||||
|
private stopDrag = () => {
|
||||||
|
this.draggingElement = null;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the current positions of all touch controls that have moved from their default positions of this orientation.
|
||||||
|
* @returns {ControlPosition[]} The current positions of all touch controls that have moved from their default positions of this orientation
|
||||||
|
*/
|
||||||
|
private getModifiedCurrentPositions(): ControlPosition[] {
|
||||||
|
return this.getControlGroupElements()
|
||||||
|
.filter((controlGroup: HTMLElement) => controlGroup.style.right || controlGroup.style.left)
|
||||||
|
.map((controlGroup: HTMLElement) => {
|
||||||
|
return {
|
||||||
|
id: controlGroup.id,
|
||||||
|
x: parseFloat(this.isLeft(controlGroup) ? controlGroup.style.left : controlGroup.style.right),
|
||||||
|
y: parseFloat(controlGroup.style.bottom),
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the key of the local storage for the control positions data of this orientation
|
||||||
|
*/
|
||||||
|
private getLocalStorageKey(): string {
|
||||||
|
return this.isLandscapeMode ? TOUCH_CONTROL_POSITIONS_LANDSCAPE : TOUCH_CONTROL_POSITIONS_PORTRAIT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the saved positions of the touch controls.
|
||||||
|
* Filters result by the given orientation.
|
||||||
|
* @returns The saved positions of the touch controls of this orientation
|
||||||
|
*/
|
||||||
|
private getSavedPositionsOfCurrentOrientation(): ControlPosition[] {
|
||||||
|
const positions = localStorage.getItem(this.getLocalStorageKey());
|
||||||
|
if (!positions) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
return JSON.parse(positions) as ControlPosition[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Saves the current positions of the touch controls to the local storage.
|
||||||
|
*/
|
||||||
|
private saveCurrentPositions() {
|
||||||
|
const pos = this.getModifiedCurrentPositions();
|
||||||
|
localStorage.setItem(this.getLocalStorageKey(), JSON.stringify(pos));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the positions of the touch controls.
|
||||||
|
* @param positions The new positions of the touch controls.
|
||||||
|
*/
|
||||||
|
private setPositions(positions: ControlPosition[]) {
|
||||||
|
this.resetPositions();
|
||||||
|
return positions.forEach((pos: ControlPosition) => {
|
||||||
|
const controlGroup = document.querySelector(`#${pos.id}`) as HTMLElement;
|
||||||
|
this.setPosition(controlGroup, pos.x, pos.y);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a control element to the given position.
|
||||||
|
* The x values are either offsets to the left or right boundary of the screen, depending on the side of the element.
|
||||||
|
* E.g. For left elements, (0, 0) is the bottom left corner of the screen and
|
||||||
|
* for right elements, (0, 0) is the bottom right corner of the screen.
|
||||||
|
* @param controlElement
|
||||||
|
* @param x Either an offset to the left or right boundary of the screen.
|
||||||
|
* @param y An offset to the bottom boundary of the screen.
|
||||||
|
*/
|
||||||
|
private setPosition(controlElement: HTMLElement, x: number, y: number) {
|
||||||
|
const rect = controlElement.getBoundingClientRect();
|
||||||
|
const checkBound = (value: number, min: number, max: number) => Math.min(Math.max(value, min), max);
|
||||||
|
const { height, width } = this.getScreenSize();
|
||||||
|
x = checkBound(x, 0, width - rect.width);
|
||||||
|
y = checkBound(y, 0, height - rect.height);
|
||||||
|
if (this.isLeft(controlElement)) {
|
||||||
|
controlElement.style.left = `${x}px`;
|
||||||
|
} else {
|
||||||
|
controlElement.style.right = `${x}px`;
|
||||||
|
}
|
||||||
|
controlElement.style.bottom = `${y}px`;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resets the positions of the touch controls to their default positions and clears the saved positions.
|
||||||
|
* Does not save the changes.
|
||||||
|
*/
|
||||||
|
private resetPositions() {
|
||||||
|
this.getControlGroupElements().forEach((controlGroup: HTMLDivElement) => {
|
||||||
|
controlGroup.style.removeProperty("left");
|
||||||
|
controlGroup.style.removeProperty("right");
|
||||||
|
controlGroup.style.removeProperty("bottom");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns all control groups of the touch controls.
|
||||||
|
* These are groups of buttons that can be dragged around the screen.
|
||||||
|
* @returns All control groups of the touch controls.
|
||||||
|
*/
|
||||||
|
private getControlGroupElements(): HTMLDivElement[] {
|
||||||
|
return [...document.querySelectorAll("#touchControls .control-group")] as HTMLDivElement[];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates the event listeners for the configuration mode.
|
||||||
|
* @param controlGroups The elements that can be dragged around the screen.
|
||||||
|
* @returns The event listeners for the configuration mode.
|
||||||
|
*/
|
||||||
|
private createConfigurationEventListeners(controlGroups: HTMLDivElement[]): ConfigurationEventListeners {
|
||||||
|
return {
|
||||||
|
"touchstart": controlGroups.map((element: HTMLDivElement) => {
|
||||||
|
const startDrag = () => this.startDrag(element);
|
||||||
|
element.addEventListener("touchstart", startDrag, { passive: true });
|
||||||
|
return startDrag;
|
||||||
|
}),
|
||||||
|
"touchmove": controlGroups.map(() => {
|
||||||
|
const drag = (event) => this.drag(event.touches[0]);
|
||||||
|
window.addEventListener("touchmove", drag, { passive: true });
|
||||||
|
return drag;
|
||||||
|
}),
|
||||||
|
"touchend": controlGroups.map(() => {
|
||||||
|
const stopDrag = () => this.stopDrag();
|
||||||
|
window.addEventListener("touchend", stopDrag, { passive: true });
|
||||||
|
return stopDrag;
|
||||||
|
})
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an overlay that covers the screen and allows the user to drag the touch controls around.
|
||||||
|
* Also enables the toolbar for saving, resetting, and canceling the changes.
|
||||||
|
* @param ui The UI of the game.
|
||||||
|
* @param scene The scene of the game.
|
||||||
|
*/
|
||||||
|
private createOverlay(ui: UI, scene: Scene) {
|
||||||
|
const container = new Phaser.GameObjects.Container(scene, 0, 0);
|
||||||
|
const overlay = new Phaser.GameObjects.Rectangle(scene, 0, 0, scene.game.canvas.width, scene.game.canvas.height, 0x000000, 0.5);
|
||||||
|
overlay.setInteractive();
|
||||||
|
container.add(overlay);
|
||||||
|
ui.add(container);
|
||||||
|
this.overlay = container;
|
||||||
|
|
||||||
|
// Display toolbar
|
||||||
|
document.querySelector("#touchControls")?.classList.add("config-mode");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows the user to configure the touch controls by dragging buttons around the screen.
|
||||||
|
* @param ui The UI of the game.
|
||||||
|
* @param scene The scene of the game.
|
||||||
|
*/
|
||||||
|
public enableConfigurationMode(ui: UI, scene: Scene) {
|
||||||
|
if (this.inConfigurationMode) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.inConfigurationMode = true;
|
||||||
|
this.touchControls.disable();
|
||||||
|
this.createOverlay(ui, scene);
|
||||||
|
this.createToolbar();
|
||||||
|
// Create event listeners with a delay to prevent the touchstart event from being triggered immediately.
|
||||||
|
setTimeout(() => {
|
||||||
|
// Remember the event listeners so they can be removed later.
|
||||||
|
this.configurationEventListeners = this.createConfigurationEventListeners(this.getControlGroupElements());
|
||||||
|
}, 500);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Disables the configuration mode.
|
||||||
|
*/
|
||||||
|
public disableConfigurationMode() {
|
||||||
|
this.inConfigurationMode = false;
|
||||||
|
this.draggingElement = null;
|
||||||
|
|
||||||
|
// Remove event listeners
|
||||||
|
const { touchstart, touchmove, touchend } = this.configurationEventListeners;
|
||||||
|
this.getControlGroupElements().forEach((element, index) => element.removeEventListener("touchstart", touchstart[index]));
|
||||||
|
touchmove.forEach((listener) => window.removeEventListener("touchmove", listener));
|
||||||
|
touchend.forEach((listener) => window.removeEventListener("touchend", listener));
|
||||||
|
|
||||||
|
// Remove configuration toolbar
|
||||||
|
const toolbar = document.querySelector("#touchControls #configToolbar");
|
||||||
|
toolbar?.remove();
|
||||||
|
|
||||||
|
// Remove overlay
|
||||||
|
this.overlay?.destroy();
|
||||||
|
document.querySelector("#touchControls")?.classList.remove("config-mode");
|
||||||
|
this.touchControls.enable();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -2,7 +2,7 @@ import BattleScene from "../../battle-scene";
|
|||||||
import { Mode } from "../ui";
|
import { Mode } from "../ui";
|
||||||
"#app/inputs-controller.js";
|
"#app/inputs-controller.js";
|
||||||
import AbstractSettingsUiHandler from "./abstract-settings-ui-handler";
|
import AbstractSettingsUiHandler from "./abstract-settings-ui-handler";
|
||||||
import { Setting, SettingType } from "#app/system/settings/settings";
|
import { SettingType } from "#app/system/settings/settings";
|
||||||
|
|
||||||
export default class SettingsAudioUiHandler extends AbstractSettingsUiHandler {
|
export default class SettingsAudioUiHandler extends AbstractSettingsUiHandler {
|
||||||
/**
|
/**
|
||||||
@ -12,9 +12,8 @@ export default class SettingsAudioUiHandler extends AbstractSettingsUiHandler {
|
|||||||
* @param mode - The UI mode, optional.
|
* @param mode - The UI mode, optional.
|
||||||
*/
|
*/
|
||||||
constructor(scene: BattleScene, mode: Mode | null = null) {
|
constructor(scene: BattleScene, mode: Mode | null = null) {
|
||||||
super(scene, mode);
|
super(scene, SettingType.AUDIO, mode);
|
||||||
this.title = "Audio";
|
this.title = "Audio";
|
||||||
this.settings = Setting.filter(s => s.type === SettingType.AUDIO);
|
|
||||||
this.localStorageKey = "settings";
|
this.localStorageKey = "settings";
|
||||||
this.rowsToDisplay = 4;
|
this.rowsToDisplay = 4;
|
||||||
}
|
}
|
||||||
|
@ -2,7 +2,7 @@ import BattleScene from "../../battle-scene";
|
|||||||
import { Mode } from "../ui";
|
import { Mode } from "../ui";
|
||||||
"#app/inputs-controller.js";
|
"#app/inputs-controller.js";
|
||||||
import AbstractSettingsUiHandler from "./abstract-settings-ui-handler";
|
import AbstractSettingsUiHandler from "./abstract-settings-ui-handler";
|
||||||
import { Setting, SettingKeys, SettingType } from "#app/system/settings/settings";
|
import { SettingKeys, SettingType } from "#app/system/settings/settings";
|
||||||
|
|
||||||
export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler {
|
export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler {
|
||||||
/**
|
/**
|
||||||
@ -12,9 +12,8 @@ export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler
|
|||||||
* @param mode - The UI mode, optional.
|
* @param mode - The UI mode, optional.
|
||||||
*/
|
*/
|
||||||
constructor(scene: BattleScene, mode: Mode | null = null) {
|
constructor(scene: BattleScene, mode: Mode | null = null) {
|
||||||
super(scene, mode);
|
super(scene, SettingType.DISPLAY, mode);
|
||||||
this.title = "Display";
|
this.title = "Display";
|
||||||
this.settings = Setting.filter(s => s.type === SettingType.DISPLAY);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update to current language from default value.
|
* Update to current language from default value.
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import BattleScene from "../../battle-scene";
|
import BattleScene from "../../battle-scene";
|
||||||
import {Setting, SettingType} from "../../system/settings/settings";
|
import { SettingType } from "../../system/settings/settings";
|
||||||
import { Mode } from "../ui";
|
import { Mode } from "../ui";
|
||||||
import AbstractSettingsUiHandler from "./abstract-settings-ui-handler";
|
import AbstractSettingsUiHandler from "./abstract-settings-ui-handler";
|
||||||
|
|
||||||
@ -11,9 +11,8 @@ export default class SettingsUiHandler extends AbstractSettingsUiHandler {
|
|||||||
* @param mode - The UI mode, optional.
|
* @param mode - The UI mode, optional.
|
||||||
*/
|
*/
|
||||||
constructor(scene: BattleScene, mode: Mode | null = null) {
|
constructor(scene: BattleScene, mode: Mode | null = null) {
|
||||||
super(scene, mode);
|
super(scene, SettingType.GENERAL, mode);
|
||||||
this.title = "General";
|
this.title = "General";
|
||||||
this.settings = Setting.filter(s => s.type === SettingType.GENERAL);
|
|
||||||
this.localStorageKey = "settings";
|
this.localStorageKey = "settings";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -445,12 +445,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
const passiveLabels = [
|
const passiveLabels = [
|
||||||
new DropDownLabel(i18next.t("filterBar:passive"), undefined, DropDownState.OFF),
|
new DropDownLabel(i18next.t("filterBar:passive"), undefined, DropDownState.OFF),
|
||||||
new DropDownLabel(i18next.t("filterBar:passiveUnlocked"), undefined, DropDownState.ON),
|
new DropDownLabel(i18next.t("filterBar:passiveUnlocked"), undefined, DropDownState.ON),
|
||||||
|
new DropDownLabel(i18next.t("filterBar:passiveUnlockable"), undefined, DropDownState.UNLOCKABLE),
|
||||||
new DropDownLabel(i18next.t("filterBar:passiveLocked"), undefined, DropDownState.EXCLUDE),
|
new DropDownLabel(i18next.t("filterBar:passiveLocked"), undefined, DropDownState.EXCLUDE),
|
||||||
];
|
];
|
||||||
|
|
||||||
const costReductionLabels = [
|
const costReductionLabels = [
|
||||||
new DropDownLabel(i18next.t("filterBar:costReduction"), undefined, DropDownState.OFF),
|
new DropDownLabel(i18next.t("filterBar:costReduction"), undefined, DropDownState.OFF),
|
||||||
new DropDownLabel(i18next.t("filterBar:costReductionUnlocked"), undefined, DropDownState.ON),
|
new DropDownLabel(i18next.t("filterBar:costReductionUnlocked"), undefined, DropDownState.ON),
|
||||||
|
new DropDownLabel(i18next.t("filterBar:costReductionUnlockable"), undefined, DropDownState.UNLOCKABLE),
|
||||||
new DropDownLabel(i18next.t("filterBar:costReductionLocked"), undefined, DropDownState.EXCLUDE),
|
new DropDownLabel(i18next.t("filterBar:costReductionLocked"), undefined, DropDownState.EXCLUDE),
|
||||||
];
|
];
|
||||||
|
|
||||||
@ -477,6 +479,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
new DropDownLabel(i18next.t("filterBar:hasHiddenAbility"), undefined, DropDownState.ON),
|
new DropDownLabel(i18next.t("filterBar:hasHiddenAbility"), undefined, DropDownState.ON),
|
||||||
new DropDownLabel(i18next.t("filterBar:noHiddenAbility"), undefined, DropDownState.EXCLUDE),
|
new DropDownLabel(i18next.t("filterBar:noHiddenAbility"), undefined, DropDownState.EXCLUDE),
|
||||||
];
|
];
|
||||||
|
const eggLabels = [
|
||||||
|
new DropDownLabel(i18next.t("filterBar:egg"), undefined, DropDownState.OFF),
|
||||||
|
new DropDownLabel(i18next.t("filterBar:eggPurchasable"), undefined, DropDownState.ON),
|
||||||
|
];
|
||||||
const pokerusLabels = [
|
const pokerusLabels = [
|
||||||
new DropDownLabel(i18next.t("filterBar:pokerus"), undefined, DropDownState.OFF),
|
new DropDownLabel(i18next.t("filterBar:pokerus"), undefined, DropDownState.OFF),
|
||||||
new DropDownLabel(i18next.t("filterBar:hasPokerus"), undefined, DropDownState.ON),
|
new DropDownLabel(i18next.t("filterBar:hasPokerus"), undefined, DropDownState.ON),
|
||||||
@ -485,6 +491,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
new DropDownOption(this.scene, "FAVORITE", favoriteLabels),
|
new DropDownOption(this.scene, "FAVORITE", favoriteLabels),
|
||||||
new DropDownOption(this.scene, "WIN", winLabels),
|
new DropDownOption(this.scene, "WIN", winLabels),
|
||||||
new DropDownOption(this.scene, "HIDDEN_ABILITY", hiddenAbilityLabels),
|
new DropDownOption(this.scene, "HIDDEN_ABILITY", hiddenAbilityLabels),
|
||||||
|
new DropDownOption(this.scene, "EGG", eggLabels),
|
||||||
new DropDownOption(this.scene, "POKERUS", pokerusLabels),
|
new DropDownOption(this.scene, "POKERUS", pokerusLabels),
|
||||||
];
|
];
|
||||||
this.filterBar.addFilter(DropDownColumn.MISC, i18next.t("filterBar:miscFilter"), new DropDown(this.scene, 0, 0, miscOptions, this.updateStarters, DropDownType.RADIAL));
|
this.filterBar.addFilter(DropDownColumn.MISC, i18next.t("filterBar:miscFilter"), new DropDown(this.scene, 0, 0, miscOptions, this.updateStarters, DropDownType.RADIAL));
|
||||||
@ -1629,6 +1636,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
this.setUpgradeAnimation(starterContainer.icon, this.lastSpecies, true);
|
this.setUpgradeAnimation(starterContainer.icon, this.lastSpecies, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
starterContainer.starterPassiveBgs.setVisible(!!this.scene.gameData.starterData[this.lastSpecies.speciesId].passiveAttr);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -1678,37 +1687,35 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Same species egg menu option. Only visible if passive is bought
|
// Same species egg menu option.
|
||||||
if (passiveAttr & PassiveAttr.UNLOCKED) {
|
const sameSpeciesEggCost = getSameSpeciesEggCandyCounts(speciesStarters[this.lastSpecies.speciesId]);
|
||||||
const sameSpeciesEggCost = getSameSpeciesEggCandyCounts(speciesStarters[this.lastSpecies.speciesId]);
|
options.push({
|
||||||
options.push({
|
label: `x${sameSpeciesEggCost} ${i18next.t("starterSelectUiHandler:sameSpeciesEgg")}`,
|
||||||
label: `x${sameSpeciesEggCost} ${i18next.t("starterSelectUiHandler:sameSpeciesEgg")}`,
|
handler: () => {
|
||||||
handler: () => {
|
if (this.scene.gameData.eggs.length < 99 && (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= sameSpeciesEggCost)) {
|
||||||
if (this.scene.gameData.eggs.length < 99 && (Overrides.FREE_CANDY_UPGRADE_OVERRIDE || candyCount >= sameSpeciesEggCost)) {
|
if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) {
|
||||||
if (!Overrides.FREE_CANDY_UPGRADE_OVERRIDE) {
|
starterData.candyCount -= sameSpeciesEggCost;
|
||||||
starterData.candyCount -= sameSpeciesEggCost;
|
|
||||||
}
|
|
||||||
this.pokemonCandyCountText.setText(`x${starterData.candyCount}`);
|
|
||||||
|
|
||||||
const egg = new Egg({scene: this.scene, species: this.lastSpecies.speciesId, sourceType: EggSourceType.SAME_SPECIES_EGG});
|
|
||||||
egg.addEggToGameData(this.scene);
|
|
||||||
|
|
||||||
this.scene.gameData.saveSystem().then(success => {
|
|
||||||
if (!success) {
|
|
||||||
return this.scene.reset(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
ui.setMode(Mode.STARTER_SELECT);
|
|
||||||
this.scene.playSound("buy");
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
return false;
|
this.pokemonCandyCountText.setText(`x${starterData.candyCount}`);
|
||||||
},
|
|
||||||
item: "candy",
|
const egg = new Egg({scene: this.scene, species: this.lastSpecies.speciesId, sourceType: EggSourceType.SAME_SPECIES_EGG});
|
||||||
itemArgs: starterColors[this.lastSpecies.speciesId]
|
egg.addEggToGameData(this.scene);
|
||||||
});
|
|
||||||
}
|
this.scene.gameData.saveSystem().then(success => {
|
||||||
|
if (!success) {
|
||||||
|
return this.scene.reset(true);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
ui.setMode(Mode.STARTER_SELECT);
|
||||||
|
this.scene.playSound("buy");
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
},
|
||||||
|
item: "candy",
|
||||||
|
itemArgs: starterColors[this.lastSpecies.speciesId]
|
||||||
|
});
|
||||||
options.push({
|
options.push({
|
||||||
label: i18next.t("menu:cancel"),
|
label: i18next.t("menu:cancel"),
|
||||||
handler: () => {
|
handler: () => {
|
||||||
@ -2287,13 +2294,16 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
const isCaught = !!(caughtVariants & DexAttr.NON_SHINY);
|
const isCaught = !!(caughtVariants & DexAttr.NON_SHINY);
|
||||||
const isUncaught = !isCaught && !isVariantCaught && !isVariant2Caught && !isVariant3Caught;
|
const isUncaught = !isCaught && !isVariantCaught && !isVariant2Caught && !isVariant3Caught;
|
||||||
const isPassiveUnlocked = this.scene.gameData.starterData[container.species.speciesId].passiveAttr > 0;
|
const isPassiveUnlocked = this.scene.gameData.starterData[container.species.speciesId].passiveAttr > 0;
|
||||||
|
const isPassiveUnlockable = this.isPassiveAvailable(container.species.speciesId) && !isPassiveUnlocked;
|
||||||
const isCostReduced = this.scene.gameData.starterData[container.species.speciesId].valueReduction > 0;
|
const isCostReduced = this.scene.gameData.starterData[container.species.speciesId].valueReduction > 0;
|
||||||
|
const isCostReductionUnlockable = this.isValueReductionAvailable(container.species.speciesId);
|
||||||
const isFavorite = this.starterPreferences[container.species.speciesId]?.favorite ?? false;
|
const isFavorite = this.starterPreferences[container.species.speciesId]?.favorite ?? false;
|
||||||
|
|
||||||
const isWin = this.scene.gameData.starterData[container.species.speciesId].classicWinCount > 0;
|
const isWin = this.scene.gameData.starterData[container.species.speciesId].classicWinCount > 0;
|
||||||
const isNotWin = this.scene.gameData.starterData[container.species.speciesId].classicWinCount === 0;
|
const isNotWin = this.scene.gameData.starterData[container.species.speciesId].classicWinCount === 0;
|
||||||
const isUndefined = this.scene.gameData.starterData[container.species.speciesId].classicWinCount === undefined;
|
const isUndefined = this.scene.gameData.starterData[container.species.speciesId].classicWinCount === undefined;
|
||||||
const isHA = this.scene.gameData.starterData[container.species.speciesId].abilityAttr & AbilityAttr.ABILITY_HIDDEN;
|
const isHA = this.scene.gameData.starterData[container.species.speciesId].abilityAttr & AbilityAttr.ABILITY_HIDDEN;
|
||||||
|
const isEggPurchasable = this.isSameSpeciesEggAvailable(container.species.speciesId);
|
||||||
|
|
||||||
const fitsGen = this.filterBar.getVals(DropDownColumn.GEN).includes(container.species.generation);
|
const fitsGen = this.filterBar.getVals(DropDownColumn.GEN).includes(container.species.generation);
|
||||||
|
|
||||||
@ -2318,6 +2328,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
return isPassiveUnlocked;
|
return isPassiveUnlocked;
|
||||||
} else if (unlocks.val === "PASSIVE" && unlocks.state === DropDownState.EXCLUDE) {
|
} else if (unlocks.val === "PASSIVE" && unlocks.state === DropDownState.EXCLUDE) {
|
||||||
return !isPassiveUnlocked;
|
return !isPassiveUnlocked;
|
||||||
|
} else if (unlocks.val === "PASSIVE" && unlocks.state === DropDownState.UNLOCKABLE) {
|
||||||
|
return isPassiveUnlockable;
|
||||||
} else if (unlocks.val === "PASSIVE" && unlocks.state === DropDownState.OFF) {
|
} else if (unlocks.val === "PASSIVE" && unlocks.state === DropDownState.OFF) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2328,6 +2340,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
return isCostReduced;
|
return isCostReduced;
|
||||||
} else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.EXCLUDE) {
|
} else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.EXCLUDE) {
|
||||||
return !isCostReduced;
|
return !isCostReduced;
|
||||||
|
} else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.UNLOCKABLE) {
|
||||||
|
return isCostReductionUnlockable;
|
||||||
} else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.OFF) {
|
} else if (unlocks.val === "COST_REDUCTION" && unlocks.state === DropDownState.OFF) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -2367,6 +2381,16 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const fitsEgg = this.filterBar.getVals(DropDownColumn.MISC).some(misc => {
|
||||||
|
if (misc.val === "EGG" && misc.state === DropDownState.ON) {
|
||||||
|
return isEggPurchasable;
|
||||||
|
} else if (misc.val === "EGG" && misc.state === DropDownState.EXCLUDE) {
|
||||||
|
return !isEggPurchasable;
|
||||||
|
} else if (misc.val === "EGG" && misc.state === DropDownState.OFF) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const fitsPokerus = this.filterBar.getVals(DropDownColumn.MISC).some(misc => {
|
const fitsPokerus = this.filterBar.getVals(DropDownColumn.MISC).some(misc => {
|
||||||
if (misc.val === "POKERUS" && misc.state === DropDownState.ON) {
|
if (misc.val === "POKERUS" && misc.state === DropDownState.ON) {
|
||||||
return this.pokerusSpecies.includes(container.species);
|
return this.pokerusSpecies.includes(container.species);
|
||||||
@ -2377,7 +2401,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
if (fitsGen && fitsType && fitsCaught && fitsPassive && fitsCostReduction && fitsFavorite && fitsWin && fitsHA && fitsPokerus) {
|
if (fitsGen && fitsType && fitsCaught && fitsPassive && fitsCostReduction && fitsFavorite && fitsWin && fitsHA && fitsEgg && fitsPokerus) {
|
||||||
this.filteredStarterContainers.push(container);
|
this.filteredStarterContainers.push(container);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user