Merge branch 'refs/heads/beta' into beta_fusion_names

This commit is contained in:
mercurius-00 2024-08-09 09:34:54 +08:00
commit 55f6e96007
154 changed files with 16248 additions and 11840 deletions

View File

@ -1,18 +0,0 @@
---
name: Feature request
about: Suggest an idea for this project
title: "[Feature]"
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
<!-- A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] -->
**Describe the Feature**
<!-- A clear and concise description of what you want to happen. -->
<!-- Add a link to the feature if it is an existing move/ability/etc -->
**Additional context**
<!-- Add any other context or screenshots about the feature request here. -->

View File

@ -0,0 +1,39 @@
name: Feature Request
description: Suggest an idea for this project
title: "[Feature] "
labels: ["enhancement"]
body:
- type: markdown
attributes:
value: |
Thanks for taking the time to fill out this feature request!
- type: textarea
id: relation
attributes:
label: Is your feature request related to a problem? Please describe.
description: Clear and concise description of what the problem is.
placeholder: E.g. "I'm always frustrated when [...]"
validations:
required: true
- type: markdown
attributes:
value: |
---
- type: textarea
id: description
attributes:
label: Describe the Feature
description: A clear and concise description of what you want to happen. Add a link to the feature if it is an existing move/ability/etc.
validations:
required: true
- type: markdown
attributes:
value: |
---
- type: textarea
id: additional-context
attributes:
label: Additional context
description: Add any other context or screenshots about the feature request here.
validations:
required: true

View File

@ -5,12 +5,12 @@
## What are the changes? ## What are the changes?
<!-- Summarize what are the changes from a user perspective on the application --> <!-- Summarize what are the changes from a user perspective on the application -->
## Why am I doing these changes? ## Why am I doing these changes the user will see?
<!-- Explain why you decided to introduce these changes --> <!-- Explain why you decided to introduce these changes -->
<!-- Does it come from an issue or another PR? Please link it --> <!-- Does it come from an issue or another PR? Please link it -->
<!-- Explain why you believe this can enhance user experience --> <!-- Explain why you believe this can enhance user experience -->
## What did change? ## What are the changes from a developer perspective?
<!-- Explicitly state what are the changes introduced by the PR --> <!-- Explicitly state what are the changes introduced by the PR -->
<!-- You can make use of a comparison between what was the state before and after your PR changes --> <!-- You can make use of a comparison between what was the state before and after your PR changes -->
@ -30,6 +30,7 @@
- [ ] The PR is self-contained and cannot be split into smaller PRs? - [ ] The PR is self-contained and cannot be split into smaller PRs?
- [ ] Have I provided a clear explanation of the changes? - [ ] Have I provided a clear explanation of the changes?
- [ ] Have I considered writing automated tests for the issue? - [ ] Have I considered writing automated tests for the issue?
- [ ] If I have text, did I add placeholders for them in locales?
- [ ] Have I tested the changes (manually)? - [ ] Have I tested the changes (manually)?
- [ ] Are all unit tests still passing? (`npm run test`) - [ ] Are all unit tests still passing? (`npm run test`)
- [ ] Are the changes visual? - [ ] Are the changes visual?

Binary file not shown.

View File

@ -1,272 +1,140 @@
{ {
"textures": [ "textures":[
{ {
"image": "1001.png", "image": "1001.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": { "w": 161, "h": 157 },
"w": 237, "scale": 1,
"h": 237 "frames": [
}, {
"scale": 1, "filename": "0001.png",
"frames": [ "rotated": false,
{ "trimmed": true,
"filename": "0001.png", "sourceSize": { "w": 81, "h": 79 },
"rotated": false, "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"trimmed": false, "frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
"sourceSize": { },
"w": 79, {
"h": 79 "filename": "0002.png",
}, "rotated": false,
"spriteSourceSize": { "trimmed": true,
"x": 0, "sourceSize": { "w": 81, "h": 79 },
"y": 0, "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"w": 79, "frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
"h": 79 },
}, {
"frame": { "filename": "0003.png",
"x": 0, "rotated": false,
"y": 0, "trimmed": true,
"w": 79, "sourceSize": { "w": 81, "h": 79 },
"h": 79 "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
} "frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
}, },
{ {
"filename": "0002.png", "filename": "0004.png",
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"sourceSize": { "sourceSize": { "w": 81, "h": 79 },
"w": 79, "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"h": 79 "frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
}, },
"spriteSourceSize": { {
"x": 0, "filename": "0005.png",
"y": 1, "rotated": false,
"w": 79, "trimmed": true,
"h": 78 "sourceSize": { "w": 81, "h": 79 },
}, "spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"frame": { "frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
"x": 79, },
"y": 0, {
"w": 79, "filename": "0006.png",
"h": 78 "rotated": false,
} "trimmed": true,
}, "sourceSize": { "w": 81, "h": 79 },
{ "spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"filename": "0012.png", "frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
"rotated": false, },
"trimmed": true, {
"sourceSize": { "filename": "0007.png",
"w": 79, "rotated": false,
"h": 79 "trimmed": true,
}, "sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"x": 0, "frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
"y": 1, },
"w": 79, {
"h": 78 "filename": "0008.png",
}, "rotated": false,
"frame": { "trimmed": true,
"x": 79, "sourceSize": { "w": 81, "h": 79 },
"y": 0, "spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"w": 79, "frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
"h": 78 },
} {
}, "filename": "0009.png",
{ "rotated": false,
"filename": "0003.png", "trimmed": true,
"rotated": false, "sourceSize": { "w": 81, "h": 79 },
"trimmed": true, "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
"sourceSize": { "frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
"w": 79, },
"h": 79 {
}, "filename": "0010.png",
"spriteSourceSize": { "rotated": false,
"x": 0, "trimmed": true,
"y": 3, "sourceSize": { "w": 81, "h": 79 },
"w": 79, "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
"h": 76 "frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
}, },
"frame": { {
"x": 158, "filename": "0011.png",
"y": 0, "rotated": false,
"w": 79, "trimmed": true,
"h": 76 "sourceSize": { "w": 81, "h": 79 },
} "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
}, "frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
{ },
"filename": "0011.png", {
"rotated": false, "filename": "0012.png",
"trimmed": true, "rotated": false,
"sourceSize": { "trimmed": true,
"w": 79, "sourceSize": { "w": 81, "h": 79 },
"h": 79 "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
}, "frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
"spriteSourceSize": { },
"x": 0, {
"y": 3, "filename": "0013.png",
"w": 79, "rotated": false,
"h": 76 "trimmed": true,
}, "sourceSize": { "w": 81, "h": 79 },
"frame": { "spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"x": 158, "frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
"y": 0, },
"w": 79, {
"h": 76 "filename": "0014.png",
} "rotated": false,
}, "trimmed": true,
{ "sourceSize": { "w": 81, "h": 79 },
"filename": "0004.png", "spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"rotated": false, "frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
"trimmed": true, },
"sourceSize": { {
"w": 79, "filename": "0015.png",
"h": 79 "rotated": false,
}, "trimmed": true,
"spriteSourceSize": { "sourceSize": { "w": 81, "h": 79 },
"x": 0, "spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"y": 4, "frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
"w": 79, },
"h": 75 {
}, "filename": "0016.png",
"frame": { "rotated": false,
"x": 158, "trimmed": true,
"y": 76, "sourceSize": { "w": 81, "h": 79 },
"w": 79, "spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"h": 75 "frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
} }
}, ]}],
{ "meta": {"app": "https://www.aseprite.org/","version": "1.3.7-x64"
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 4,
"w": 79,
"h": 75
},
"frame": {
"x": 158,
"y": 76,
"w": 79,
"h": 75
}
},
{
"filename": "0005.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 5,
"w": 79,
"h": 74
},
"frame": {
"x": 79,
"y": 78,
"w": 79,
"h": 74
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 5,
"w": 79,
"h": 74
},
"frame": {
"x": 79,
"y": 78,
"w": 79,
"h": 74
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 6,
"w": 79,
"h": 73
},
"frame": {
"x": 0,
"y": 79,
"w": 79,
"h": 73
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 6,
"w": 79,
"h": 73
},
"frame": {
"x": 0,
"y": 79,
"w": 79,
"h": 73
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 7,
"w": 79,
"h": 72
},
"frame": {
"x": 158,
"y": 151,
"w": 79,
"h": 72
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:2873276355a5ff8fe57d616764a11cb5:5516cfd39964108d480df461b020785f:c8a3fc07f857e38a4f887e43523aab92$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

@ -1,272 +1,140 @@
{ {
"textures": [ "textures":[
{ {
"image": "1001.png", "image": "1001.png",
"format": "RGBA8888", "format": "RGBA8888",
"size": { "size": { "w": 161, "h": 157 },
"w": 237, "scale": 1,
"h": 237 "frames": [
}, {
"scale": 1, "filename": "0001.png",
"frames": [ "rotated": false,
{ "trimmed": true,
"filename": "0001.png", "sourceSize": { "w": 81, "h": 79 },
"rotated": false, "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"trimmed": false, "frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
"sourceSize": { },
"w": 79, {
"h": 79 "filename": "0002.png",
}, "rotated": false,
"spriteSourceSize": { "trimmed": true,
"x": 0, "sourceSize": { "w": 81, "h": 79 },
"y": 0, "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"w": 79, "frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
"h": 79 },
}, {
"frame": { "filename": "0003.png",
"x": 0, "rotated": false,
"y": 0, "trimmed": true,
"w": 79, "sourceSize": { "w": 81, "h": 79 },
"h": 79 "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
} "frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
}, },
{ {
"filename": "0002.png", "filename": "0004.png",
"rotated": false, "rotated": false,
"trimmed": true, "trimmed": true,
"sourceSize": { "sourceSize": { "w": 81, "h": 79 },
"w": 79, "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"h": 79 "frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
}, },
"spriteSourceSize": { {
"x": 0, "filename": "0005.png",
"y": 1, "rotated": false,
"w": 79, "trimmed": true,
"h": 78 "sourceSize": { "w": 81, "h": 79 },
}, "spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"frame": { "frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
"x": 79, },
"y": 0, {
"w": 79, "filename": "0006.png",
"h": 78 "rotated": false,
} "trimmed": true,
}, "sourceSize": { "w": 81, "h": 79 },
{ "spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"filename": "0012.png", "frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
"rotated": false, },
"trimmed": true, {
"sourceSize": { "filename": "0007.png",
"w": 79, "rotated": false,
"h": 79 "trimmed": true,
}, "sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"x": 0, "frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
"y": 1, },
"w": 79, {
"h": 78 "filename": "0008.png",
}, "rotated": false,
"frame": { "trimmed": true,
"x": 79, "sourceSize": { "w": 81, "h": 79 },
"y": 0, "spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"w": 79, "frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
"h": 78 },
} {
}, "filename": "0009.png",
{ "rotated": false,
"filename": "0003.png", "trimmed": true,
"rotated": false, "sourceSize": { "w": 81, "h": 79 },
"trimmed": true, "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
"sourceSize": { "frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
"w": 79, },
"h": 79 {
}, "filename": "0010.png",
"spriteSourceSize": { "rotated": false,
"x": 0, "trimmed": true,
"y": 3, "sourceSize": { "w": 81, "h": 79 },
"w": 79, "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
"h": 76 "frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
}, },
"frame": { {
"x": 158, "filename": "0011.png",
"y": 0, "rotated": false,
"w": 79, "trimmed": true,
"h": 76 "sourceSize": { "w": 81, "h": 79 },
} "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
}, "frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
{ },
"filename": "0011.png", {
"rotated": false, "filename": "0012.png",
"trimmed": true, "rotated": false,
"sourceSize": { "trimmed": true,
"w": 79, "sourceSize": { "w": 81, "h": 79 },
"h": 79 "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
}, "frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
"spriteSourceSize": { },
"x": 0, {
"y": 3, "filename": "0013.png",
"w": 79, "rotated": false,
"h": 76 "trimmed": true,
}, "sourceSize": { "w": 81, "h": 79 },
"frame": { "spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"x": 158, "frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
"y": 0, },
"w": 79, {
"h": 76 "filename": "0014.png",
} "rotated": false,
}, "trimmed": true,
{ "sourceSize": { "w": 81, "h": 79 },
"filename": "0004.png", "spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"rotated": false, "frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
"trimmed": true, },
"sourceSize": { {
"w": 79, "filename": "0015.png",
"h": 79 "rotated": false,
}, "trimmed": true,
"spriteSourceSize": { "sourceSize": { "w": 81, "h": 79 },
"x": 0, "spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"y": 4, "frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
"w": 79, },
"h": 75 {
}, "filename": "0016.png",
"frame": { "rotated": false,
"x": 158, "trimmed": true,
"y": 76, "sourceSize": { "w": 81, "h": 79 },
"w": 79, "spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"h": 75 "frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
} }
}, ]}],
{ "meta": {"app": "https://www.aseprite.org/","version": "1.3.7-x64"
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 4,
"w": 79,
"h": 75
},
"frame": {
"x": 158,
"y": 76,
"w": 79,
"h": 75
}
},
{
"filename": "0005.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 5,
"w": 79,
"h": 74
},
"frame": {
"x": 79,
"y": 78,
"w": 79,
"h": 74
}
},
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 5,
"w": 79,
"h": 74
},
"frame": {
"x": 79,
"y": 78,
"w": 79,
"h": 74
}
},
{
"filename": "0006.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 6,
"w": 79,
"h": 73
},
"frame": {
"x": 0,
"y": 79,
"w": 79,
"h": 73
}
},
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 6,
"w": 79,
"h": 73
},
"frame": {
"x": 0,
"y": 79,
"w": 79,
"h": 73
}
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 7,
"w": 79,
"h": 72
},
"frame": {
"x": 158,
"y": 151,
"w": 79,
"h": 72
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:83b74b0673ef1ae8346efab60ae89872:f76c930177bf7a296d3f47eb6294ae4f:c8a3fc07f857e38a4f887e43523aab92$"
} }
} }

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB

View File

Before

Width:  |  Height:  |  Size: 303 B

After

Width:  |  Height:  |  Size: 303 B

View File

Before

Width:  |  Height:  |  Size: 342 B

After

Width:  |  Height:  |  Size: 342 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 353 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 359 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 346 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 352 B

View File

Before

Width:  |  Height:  |  Size: 846 B

After

Width:  |  Height:  |  Size: 846 B

View File

Before

Width:  |  Height:  |  Size: 938 B

After

Width:  |  Height:  |  Size: 938 B

View File

Before

Width:  |  Height:  |  Size: 510 B

After

Width:  |  Height:  |  Size: 510 B

View File

Before

Width:  |  Height:  |  Size: 513 B

After

Width:  |  Height:  |  Size: 513 B

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.1 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 3.2 KiB

After

Width:  |  Height:  |  Size: 3.2 KiB

View File

Before

Width:  |  Height:  |  Size: 541 B

After

Width:  |  Height:  |  Size: 541 B

View File

Before

Width:  |  Height:  |  Size: 557 B

After

Width:  |  Height:  |  Size: 557 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 471 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 482 B

View File

Before

Width:  |  Height:  |  Size: 697 B

After

Width:  |  Height:  |  Size: 697 B

View File

Before

Width:  |  Height:  |  Size: 661 B

After

Width:  |  Height:  |  Size: 661 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

After

Width:  |  Height:  |  Size: 29 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 64 KiB

After

Width:  |  Height:  |  Size: 63 KiB

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "aqua_admin_f.png",
"format": "RGBA8888",
"size": {
"w": 80,
"h": 80
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
},
"frame": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:efd07ff3ed1e610150a4b8ca18974343:d9b85b9eb11182e9e4669e2bd8b08694:72b7b50231708a9486d5f315824e4df1$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 865 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "aqua_admin_m.png",
"format": "RGBA8888",
"size": {
"w": 80,
"h": 80
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
},
"frame": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "flare_admin_f.png",
"format": "RGBA8888",
"size": {
"w": 80,
"h": 80
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
},
"frame": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "flare_admin_m.png",
"format": "RGBA8888",
"size": {
"w": 80,
"h": 80
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
},
"frame": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:c30bf82452209a923f4becf13d275a9a:a6355b09f92c9c0388d0b919010f587f:0638dbf213f8a974eb5af76eb1e5ddeb$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 789 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "galactic_admin_f.png",
"format": "RGBA8888",
"size": {
"w": 80,
"h": 80
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
},
"frame": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "galactic_admin_m.png",
"format": "RGBA8888",
"size": {
"w": 80,
"h": 80
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
},
"frame": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:3012867f03f02c4ee67a8ab3ad5a000e:77a5f60f1adc158664b3b2ee17bf30fe:7e8259b5177c0a76e5d02d6bdc66affe$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 689 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "magma_admin_f.png",
"format": "RGBA8888",
"size": {
"w": 80,
"h": 80
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
},
"frame": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 847 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "magma_admin_m.png",
"format": "RGBA8888",
"size": {
"w": 80,
"h": 80
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
},
"frame": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:f63ad48affc076f60fae78992c96a2bf:80928b32710abcb28c07c6fc5a425d99:3b961d8852b62aaf24ceb2030c036515$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 845 B

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "rocket_admin_f.png",
"format": "RGBA8888",
"size": {
"w": 80,
"h": 80
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
},
"frame": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 736 B

View File

@ -0,0 +1,41 @@
{
"textures": [
{
"image": "rocket_admin_m.png",
"format": "RGBA8888",
"size": {
"w": 80,
"h": 80
},
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 80,
"h": 80
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
},
"frame": {
"x": 0,
"y": 0,
"w": 80,
"h": 80
}
}
]
}
],
"meta": {
"app": "https://www.codeandweb.com/texturepacker",
"version": "3.0",
"smartupdate": "$TexturePacker:SmartUpdate:831f5748dad92911b10a1cb358ee2dae:a3bf81bbaa3b49cad5e0e549cf94563b:bb6befc9383c9c08837183ae2a7a80c1$"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 645 B

View File

@ -1792,8 +1792,10 @@ export default class BattleScene extends SceneBase {
return 13.950; return 13.950;
case "battle_johto_champion": //B2W2 Johto Champion Battle case "battle_johto_champion": //B2W2 Johto Champion Battle
return 23.498; return 23.498;
case "battle_hoenn_champion": //B2W2 Hoenn Champion Battle case "battle_hoenn_champion_g5": //B2W2 Hoenn Champion Battle
return 11.328; return 11.328;
case "battle_hoenn_champion_g6": //ORAS Hoenn Champion Battle
return 11.762;
case "battle_sinnoh_champion": //B2W2 Sinnoh Champion Battle case "battle_sinnoh_champion": //B2W2 Sinnoh Champion Battle
return 12.235; return 12.235;
case "battle_champion_alder": //BW Unova Champion Battle case "battle_champion_alder": //BW Unova Champion Battle

View File

@ -425,7 +425,13 @@ export class FixedBattleConfig {
} }
} }
function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[]): GetTrainerFunc { /**
* Helper function to generate a random trainer for evil team trainers and the elite 4/champion
* @param trainerPool The TrainerType or list of TrainerTypes that can possibly be generated
* @param randomGender whether or not to randomly (50%) generate a female trainer (for use with evil team grunts)
* @returns the generated trainer
*/
function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[], randomGender: boolean = false): GetTrainerFunc {
return (scene: BattleScene) => { return (scene: BattleScene) => {
const rand = Utils.randSeedInt(trainerPool.length); const rand = Utils.randSeedInt(trainerPool.length);
const trainerTypes: TrainerType[] = []; const trainerTypes: TrainerType[] = [];
@ -435,11 +441,20 @@ function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[]): Get
: trainerPoolEntry; : trainerPoolEntry;
trainerTypes.push(trainerType); trainerTypes.push(trainerType);
} }
// If the trainer type has a double variant, there's a 33% chance of it being a double battle (for now we only allow tate&liza to be double) let trainerGender = TrainerVariant.DEFAULT;
if (trainerConfigs[trainerTypes[rand]].trainerTypeDouble && (trainerTypes[rand] === TrainerType.TATE || trainerTypes[rand] === TrainerType.LIZA)) { if (randomGender) {
return new Trainer(scene, trainerTypes[rand], Utils.randSeedInt(3) ? TrainerVariant.DOUBLE : TrainerVariant.DEFAULT); trainerGender = (Utils.randInt(2) === 0) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT;
} }
return new Trainer(scene, trainerTypes[rand], TrainerVariant.DEFAULT);
/* 1/3 chance for evil team grunts to be double battles */
const evilTeamGrunts = [TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT];
const isEvilTeamGrunt = evilTeamGrunts.includes(trainerTypes[rand]);
if (trainerConfigs[trainerTypes[rand]].hasDouble && isEvilTeamGrunt) {
return new Trainer(scene, trainerTypes[rand], (Utils.randInt(3) === 0) ? TrainerVariant.DOUBLE : trainerGender);
}
return new Trainer(scene, trainerTypes[rand], trainerGender);
}; };
} }
@ -449,7 +464,8 @@ export interface FixedBattleConfigs {
/** /**
* Youngster/Lass on 5 * Youngster/Lass on 5
* Rival on 8, 55, 95, 145, 195 * Rival on 8, 55, 95, 145, 195
* Evil team grunts on 35, 62, 64, 66, 112, 114 * Evil team grunts on 35, 62, 64, and 112
* Evil team admin on 66 and 114
* Evil leader on 115, 165 * Evil leader on 115, 165
* E4 on 182, 184, 186, 188 * E4 on 182, 184, 186, 188
* Champion on 190 * Champion on 190
@ -462,21 +478,21 @@ export const classicFixedBattles: FixedBattleConfigs = {
[25]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [25]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[35]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [35]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)),
[55]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [55]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_3, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_3, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[62]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) [62]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)),
[64]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) [64]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)),
[66]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) [66]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_ADMIN, TrainerType.MAGMA_ADMIN, TrainerType.AQUA_ADMIN, TrainerType.GALACTIC_ADMIN, TrainerType.PLASMA_SAGE, TrainerType.FLARE_ADMIN ], true)),
[95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [95]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)), .setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_4, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[112]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) [112]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ], true)),
[114]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) [114]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_GRUNT, TrainerType.MAGMA_GRUNT, TrainerType.AQUA_GRUNT, TrainerType.GALACTIC_GRUNT, TrainerType.PLASMA_GRUNT, TrainerType.FLARE_GRUNT ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_ADMIN, TrainerType.MAGMA_ADMIN, TrainerType.AQUA_ADMIN, TrainerType.GALACTIC_ADMIN, TrainerType.PLASMA_SAGE, TrainerType.FLARE_ADMIN ], true)),
[115]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35) [115]: new FixedBattleConfig().setBattleType(BattleType.TRAINER).setSeedOffsetWave(35)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE ])), .setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE ])),
[145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER) [145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)

View File

@ -941,14 +941,19 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr {
export class PostDefendWeatherChangeAbAttr extends PostDefendAbAttr { export class PostDefendWeatherChangeAbAttr extends PostDefendAbAttr {
private weatherType: WeatherType; private weatherType: WeatherType;
protected condition: PokemonDefendCondition | null;
constructor(weatherType: WeatherType) { constructor(weatherType: WeatherType, condition?: PokemonDefendCondition) {
super(); super();
this.weatherType = weatherType; this.weatherType = weatherType;
this.condition = condition ?? null;
} }
applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean {
if (this.condition !== null && !this.condition(pokemon, attacker, move)) {
return false;
}
if (!pokemon.scene.arena.weather?.isImmutable()) { if (!pokemon.scene.arena.weather?.isImmutable()) {
return pokemon.scene.arena.trySetWeather(this.weatherType, true); return pokemon.scene.arena.trySetWeather(this.weatherType, true);
} }
@ -5092,7 +5097,7 @@ export function initAbilities() {
.attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.hasFlag(MoveFlags.SOUND_BASED), 0.5) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.hasFlag(MoveFlags.SOUND_BASED), 0.5)
.ignorable(), .ignorable(),
new Ability(Abilities.SAND_SPIT, 8) new Ability(Abilities.SAND_SPIT, 8)
.attr(PostDefendWeatherChangeAbAttr, WeatherType.SANDSTORM), .attr(PostDefendWeatherChangeAbAttr, WeatherType.SANDSTORM, (target, user, move) => move.category !== MoveCategory.STATUS),
new Ability(Abilities.ICE_SCALES, 8) new Ability(Abilities.ICE_SCALES, 8)
.attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.category === MoveCategory.SPECIAL, 0.5) .attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.category === MoveCategory.SPECIAL, 0.5)
.ignorable(), .ignorable(),

View File

@ -1747,7 +1747,7 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source
case BattlerTagType.RECEIVE_DOUBLE_DAMAGE: case BattlerTagType.RECEIVE_DOUBLE_DAMAGE:
return new BattlerTag(tagType, BattlerTagLapseType.PRE_MOVE, 1, sourceMove); return new BattlerTag(tagType, BattlerTagLapseType.PRE_MOVE, 1, sourceMove);
case BattlerTagType.BYPASS_SLEEP: case BattlerTagType.BYPASS_SLEEP:
return new BattlerTag(BattlerTagType.BYPASS_SLEEP, BattlerTagLapseType.TURN_END, turnCount, sourceMove); return new BattlerTag(tagType, BattlerTagLapseType.TURN_END, turnCount, sourceMove);
case BattlerTagType.IGNORE_FLYING: case BattlerTagType.IGNORE_FLYING:
return new GroundedTag(tagType, BattlerTagLapseType.CUSTOM, sourceMove); return new GroundedTag(tagType, BattlerTagLapseType.CUSTOM, sourceMove);
case BattlerTagType.ROOSTED: case BattlerTagType.ROOSTED:

View File

@ -406,14 +406,7 @@ export class SingleGenerationChallenge extends Challenge {
} }
applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false, checkEvolutions?: boolean): boolean { applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false, checkEvolutions?: boolean): boolean {
/** const generations = [pokemon.generation];
* We have special code below for victini because it is classed as a generation 4 pokemon in the code
* despite being a generation 5 pokemon. This is due to UI constraints, the starter select screen has
* no more room for pokemon so victini is put in the gen 4 section instead. This code just overrides the
* normal generation check to correctly treat victini as gen 5.
*/
const starterGeneration = pokemon.speciesId === Species.VICTINI ? 5 : pokemon.generation;
const generations = [starterGeneration];
const checkPokemonEvolutions = checkEvolutions ?? true as boolean; const checkPokemonEvolutions = checkEvolutions ?? true as boolean;
if (soft) { if (soft) {
const speciesToCheck = [pokemon.speciesId]; const speciesToCheck = [pokemon.speciesId];

View File

@ -459,6 +459,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
] ]
} }
], ],
[TrainerType.ROCKET_ADMIN]: [
{
encounter: [
"dialogue:rocket_admin.encounter.1",
"dialogue:rocket_admin.encounter.2",
"dialogue:rocket_admin.encounter.3",
],
victory: [
"dialogue:rocket_admin.victory.1",
"dialogue:rocket_admin.victory.2",
"dialogue:rocket_admin.victory.3",
]
}
],
[TrainerType.MAGMA_GRUNT]: [ [TrainerType.MAGMA_GRUNT]: [
{ {
encounter: [ encounter: [
@ -469,6 +483,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
] ]
} }
], ],
[TrainerType.MAGMA_ADMIN]: [
{
encounter: [
"dialogue:magma_admin.encounter.1",
"dialogue:magma_admin.encounter.2",
"dialogue:magma_admin.encounter.3",
],
victory: [
"dialogue:magma_admin.victory.1",
"dialogue:magma_admin.victory.2",
"dialogue:magma_admin.victory.3",
]
}
],
[TrainerType.AQUA_GRUNT]: [ [TrainerType.AQUA_GRUNT]: [
{ {
encounter: [ encounter: [
@ -479,6 +507,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
] ]
} }
], ],
[TrainerType.AQUA_ADMIN]: [
{
encounter: [
"dialogue:aqua_admin.encounter.1",
"dialogue:aqua_admin.encounter.2",
"dialogue:aqua_admin.encounter.3",
],
victory: [
"dialogue:aqua_admin.victory.1",
"dialogue:aqua_admin.victory.2",
"dialogue:aqua_admin.victory.3",
]
}
],
[TrainerType.GALACTIC_GRUNT]: [ [TrainerType.GALACTIC_GRUNT]: [
{ {
encounter: [ encounter: [
@ -489,6 +531,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
] ]
} }
], ],
[TrainerType.GALACTIC_ADMIN]: [
{
encounter: [
"dialogue:galactic_admin.encounter.1",
"dialogue:galactic_admin.encounter.2",
"dialogue:galactic_admin.encounter.3",
],
victory: [
"dialogue:galactic_admin.victory.1",
"dialogue:galactic_admin.victory.2",
"dialogue:galactic_admin.victory.3",
]
}
],
[TrainerType.PLASMA_GRUNT]: [ [TrainerType.PLASMA_GRUNT]: [
{ {
encounter: [ encounter: [
@ -499,6 +555,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
] ]
} }
], ],
[TrainerType.PLASMA_SAGE]: [
{
encounter: [
"dialogue:plasma_sage.encounter.1",
"dialogue:plasma_sage.encounter.2",
"dialogue:plasma_sage.encounter.3",
],
victory: [
"dialogue:plasma_sage.victory.1",
"dialogue:plasma_sage.victory.2",
"dialogue:plasma_sage.victory.3",
]
}
],
[TrainerType.FLARE_GRUNT]: [ [TrainerType.FLARE_GRUNT]: [
{ {
encounter: [ encounter: [
@ -509,6 +579,20 @@ export const trainerTypeDialogue: TrainerTypeDialogue = {
] ]
} }
], ],
[TrainerType.FLARE_ADMIN]: [
{
encounter: [
"dialogue:flare_admin.encounter.1",
"dialogue:flare_admin.encounter.2",
"dialogue:flare_admin.encounter.3",
],
victory: [
"dialogue:flare_admin.victory.1",
"dialogue:flare_admin.victory.2",
"dialogue:flare_admin.victory.3",
]
}
],
[TrainerType.ROCKET_BOSS_GIOVANNI_1]: [ [TrainerType.ROCKET_BOSS_GIOVANNI_1]: [
{ {
encounter: [ encounter: [

View File

@ -438,7 +438,7 @@ export const speciesEggMoves = {
[Species.CHEWTLE]: [ Moves.FIRE_FANG, Moves.ACCELEROCK, Moves.SHELL_SMASH, Moves.FISHIOUS_REND ], [Species.CHEWTLE]: [ Moves.FIRE_FANG, Moves.ACCELEROCK, Moves.SHELL_SMASH, Moves.FISHIOUS_REND ],
[Species.YAMPER]: [ Moves.ICE_FANG, Moves.SWORDS_DANCE, Moves.THUNDER_FANG, Moves.ZIPPY_ZAP ], [Species.YAMPER]: [ Moves.ICE_FANG, Moves.SWORDS_DANCE, Moves.THUNDER_FANG, Moves.ZIPPY_ZAP ],
[Species.ROLYCOLY]: [ Moves.BITTER_BLADE, Moves.BODY_PRESS, Moves.BULK_UP, Moves.DIAMOND_STORM ], [Species.ROLYCOLY]: [ Moves.BITTER_BLADE, Moves.BODY_PRESS, Moves.BULK_UP, Moves.DIAMOND_STORM ],
[Species.APPLIN]: [ Moves.DRAGON_CHEER, Moves.DRAGON_HAMMER, Moves.FLOWER_TRICK, Moves.STRENGTH_SAP ], [Species.APPLIN]: [ Moves.MATCHA_GOTCHA, Moves.DRAGON_HAMMER, Moves.FLOWER_TRICK, Moves.STRENGTH_SAP ],
[Species.SILICOBRA]: [ Moves.SHORE_UP, Moves.SHED_TAIL, Moves.STONE_EDGE, Moves.PRECIPICE_BLADES ], [Species.SILICOBRA]: [ Moves.SHORE_UP, Moves.SHED_TAIL, Moves.STONE_EDGE, Moves.PRECIPICE_BLADES ],
[Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.SCORCHING_SANDS, Moves.OBLIVION_WING ], [Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.SCORCHING_SANDS, Moves.OBLIVION_WING ],
[Species.ARROKUDA]: [ Moves.SUPERCELL_SLAM, Moves.KNOCK_OFF, Moves.ICE_SPINNER, Moves.FILLET_AWAY ], [Species.ARROKUDA]: [ Moves.SUPERCELL_SLAM, Moves.KNOCK_OFF, Moves.ICE_SPINNER, Moves.FILLET_AWAY ],

View File

@ -2,7 +2,7 @@ import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./
import { BattleEndPhase, MoveEndPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases"; import { BattleEndPhase, MoveEndPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases";
import { BattleStat, getBattleStatName } from "./battle-stat"; import { BattleStat, getBattleStatName } from "./battle-stat";
import { EncoreTag, HelpingHandTag, SemiInvulnerableTag, StockpilingTag, TypeBoostTag } from "./battler-tags"; import { EncoreTag, HelpingHandTag, SemiInvulnerableTag, StockpilingTag, TypeBoostTag } from "./battler-tags";
import { getPokemonMessage, getPokemonNameWithAffix } from "../messages"; import { getPokemonNameWithAffix } from "../messages";
import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon"; import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon";
import { StatusEffect, getStatusEffectHealText, isNonVolatileStatusEffect, getNonVolatileStatusEffects} from "./status-effect"; import { StatusEffect, getStatusEffectHealText, isNonVolatileStatusEffect, getNonVolatileStatusEffects} from "./status-effect";
import { getTypeResistances, Type } from "./type"; import { getTypeResistances, Type } from "./type";
@ -13,10 +13,9 @@ import { ArenaTagSide, ArenaTrapTag, WeakenMoveTypeTag } from "./arena-tag";
import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr, applyPostDefendAbAttrs, PostDefendContactApplyStatusEffectAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, BlockItemTheftAbAttr, applyPostAttackAbAttrs, ConfusionOnStatusEffectAbAttr, HealFromBerryUseAbAttr, IgnoreProtectOnContactAbAttr, IgnoreMoveEffectsAbAttr, applyPreDefendAbAttrs, MoveEffectChanceMultiplierAbAttr, WonderSkinAbAttr, applyPreAttackAbAttrs, MoveTypeChangeAttr, UserFieldMoveTypePowerBoostAbAttr, FieldMoveTypePowerBoostAbAttr, AllyMoveCategoryPowerBoostAbAttr, VariableMovePowerAbAttr } from "./ability"; import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr, applyPostDefendAbAttrs, PostDefendContactApplyStatusEffectAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, BlockItemTheftAbAttr, applyPostAttackAbAttrs, ConfusionOnStatusEffectAbAttr, HealFromBerryUseAbAttr, IgnoreProtectOnContactAbAttr, IgnoreMoveEffectsAbAttr, applyPreDefendAbAttrs, MoveEffectChanceMultiplierAbAttr, WonderSkinAbAttr, applyPreAttackAbAttrs, MoveTypeChangeAttr, UserFieldMoveTypePowerBoostAbAttr, FieldMoveTypePowerBoostAbAttr, AllyMoveCategoryPowerBoostAbAttr, VariableMovePowerAbAttr } from "./ability";
import { allAbilities } from "./ability"; import { allAbilities } from "./ability";
import { PokemonHeldItemModifier, BerryModifier, PreserveBerryModifier, PokemonMoveAccuracyBoosterModifier, AttackTypeBoosterModifier, PokemonMultiHitModifier } from "../modifier/modifier"; import { PokemonHeldItemModifier, BerryModifier, PreserveBerryModifier, PokemonMoveAccuracyBoosterModifier, AttackTypeBoosterModifier, PokemonMultiHitModifier } from "../modifier/modifier";
import { BattlerIndex } from "../battle"; import { BattlerIndex, BattleType } from "../battle";
import { Stat } from "./pokemon-stat"; import { Stat } from "./pokemon-stat";
import { TerrainType } from "./terrain"; import { TerrainType } from "./terrain";
import { SpeciesFormChangeActiveTrigger } from "./pokemon-forms";
import { ModifierPoolType } from "#app/modifier/modifier-type"; import { ModifierPoolType } from "#app/modifier/modifier-type";
import { Command } from "../ui/command-ui-handler"; import { Command } from "../ui/command-ui-handler";
import i18next from "i18next"; import i18next from "i18next";
@ -1388,7 +1387,7 @@ export class HealAttr extends MoveEffectAttr {
*/ */
addHealPhase(target: Pokemon, healRatio: number) { addHealPhase(target: Pokemon, healRatio: number) {
target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(),
Math.max(Math.floor(target.getMaxHp() * healRatio), 1), getPokemonMessage(target, " \nhad its HP restored."), true, !this.showAnim)); Math.max(Math.floor(target.getMaxHp() * healRatio), 1), i18next.t("moveTriggers:healHp", {pokemonName: getPokemonNameWithAffix(target)}), true, !this.showAnim));
} }
getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer { getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
@ -1482,7 +1481,7 @@ export class SacrificialFullRestoreAttr extends SacrificialAttr {
const maxPartyMemberHp = user.scene.getParty().map(p => p.getMaxHp()).reduce((maxHp: integer, hp: integer) => Math.max(hp, maxHp), 0); const maxPartyMemberHp = user.scene.getParty().map(p => p.getMaxHp()).reduce((maxHp: integer, hp: integer) => Math.max(hp, maxHp), 0);
user.scene.pushPhase(new PokemonHealPhase(user.scene, user.getBattlerIndex(), user.scene.pushPhase(new PokemonHealPhase(user.scene, user.getBattlerIndex(),
maxPartyMemberHp, getPokemonMessage(user, "'s Healing Wish\nwas granted!"), true, false, false, true), true); maxPartyMemberHp, i18next.t("moveTriggers:sacrificialFullRestore", {pokemonName: getPokemonNameWithAffix(user)}), true, false, false, true), true);
return true; return true;
} }
@ -1817,13 +1816,10 @@ export class MultiHitAttr extends MoveAttr {
} }
case MultiHitType._2: case MultiHitType._2:
return 2; return 2;
break;
case MultiHitType._3: case MultiHitType._3:
return 3; return 3;
break;
case MultiHitType._10: case MultiHitType._10:
return 10; return 10;
break;
case MultiHitType.BEAT_UP: case MultiHitType.BEAT_UP:
const party = user.isPlayer() ? user.scene.getParty() : user.scene.getEnemyParty(); const party = user.isPlayer() ? user.scene.getParty() : user.scene.getEnemyParty();
// No status means the ally pokemon can contribute to Beat Up // No status means the ally pokemon can contribute to Beat Up
@ -2631,36 +2627,15 @@ export class GrowthStatChangeAttr extends StatChangeAttr {
} }
} }
export class HalfHpStatMaxAttr extends StatChangeAttr {
constructor(stat: BattleStat) {
super(stat, 12, true, null, false);
}
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
return new Promise<boolean>(resolve => {
user.damageAndUpdate(Math.floor(user.getMaxHp() / 2), HitResult.OTHER, false, true);
user.updateInfo().then(() => {
const ret = super.apply(user, target, move, args);
user.scene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", {pokemonName: getPokemonNameWithAffix(user), statName: getBattleStatName(this.stats[BattleStat.ATK])}));
resolve(ret);
});
});
}
getCondition(): MoveConditionFunc {
return (user, target, move) => user.getHpRatio() > 0.5 && user.summonData.battleStats[this.stats[BattleStat.ATK]] < 6;
}
// TODO: Add benefit score that considers HP cut
}
export class CutHpStatBoostAttr extends StatChangeAttr { export class CutHpStatBoostAttr extends StatChangeAttr {
private cutRatio: integer; private cutRatio: integer;
private messageCallback: ((user: Pokemon) => void) | undefined;
constructor(stat: BattleStat | BattleStat[], levels: integer, cutRatio: integer) { constructor(stat: BattleStat | BattleStat[], levels: integer, cutRatio: integer, messageCallback?: ((user: Pokemon) => void) | undefined) {
super(stat, levels, true, null, true); super(stat, levels, true, null, true);
this.cutRatio = cutRatio; this.cutRatio = cutRatio;
this.messageCallback = messageCallback;
} }
apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise<boolean> {
@ -2668,13 +2643,16 @@ export class CutHpStatBoostAttr extends StatChangeAttr {
user.damageAndUpdate(Math.floor(user.getMaxHp() / this.cutRatio), HitResult.OTHER, false, true); user.damageAndUpdate(Math.floor(user.getMaxHp() / this.cutRatio), HitResult.OTHER, false, true);
user.updateInfo().then(() => { user.updateInfo().then(() => {
const ret = super.apply(user, target, move, args); const ret = super.apply(user, target, move, args);
if (this.messageCallback) {
this.messageCallback(user);
}
resolve(ret); resolve(ret);
}); });
}); });
} }
getCondition(): MoveConditionFunc { getCondition(): MoveConditionFunc {
return (user, target, move) => user.getHpRatio() > 1 / this.cutRatio; return (user, target, move) => user.getHpRatio() > 1 / this.cutRatio && this.stats.some(s => user.summonData.battleStats[s] < 6);
} }
} }
@ -2712,7 +2690,7 @@ export class InvertStatsAttr extends MoveEffectAttr {
target.updateInfo(); target.updateInfo();
user.updateInfo(); user.updateInfo();
target.scene.queueMessage(getPokemonMessage(target, "'s stat changes\nwere all reversed!")); target.scene.queueMessage(i18next.t("moveTriggers:invertStats", {pokemonName: getPokemonNameWithAffix(target)}));
return true; return true;
} }
@ -2730,7 +2708,7 @@ export class ResetStatsAttr extends MoveEffectAttr {
target.updateInfo(); target.updateInfo();
user.updateInfo(); user.updateInfo();
target.scene.queueMessage(getPokemonMessage(target, "'s stat changes\nwere eliminated!")); target.scene.queueMessage(i18next.t("moveTriggers:resetStats", {pokemonName: getPokemonNameWithAffix(target)}));
return true; return true;
} }
@ -4138,7 +4116,7 @@ export class DisableMoveAttr extends MoveEffectAttr {
target.summonData.disabledMove = disabledMove.moveId; target.summonData.disabledMove = disabledMove.moveId;
target.summonData.disabledTurns = 4; target.summonData.disabledTurns = 4;
user.scene.queueMessage(getPokemonMessage(target, `'s ${disabledMove.getName()}\nwas disabled!`)); user.scene.queueMessage(i18next.t("abilityTriggers:postDefendMoveDisable", { pokemonNameWithAffix: getPokemonNameWithAffix(target), moveName: disabledMove.getName()}));
return true; return true;
} }
@ -4445,7 +4423,7 @@ export class FaintCountdownAttr extends AddBattlerTagAttr {
return false; return false;
} }
user.scene.queueMessage(getPokemonMessage(target, `\nwill faint in ${this.turnCountMin - 1} turns.`)); user.scene.queueMessage(i18next.t("moveTriggers:faintCountdown", {pokemonName: getPokemonNameWithAffix(target), turnCount: this.turnCountMin - 1}));
return true; return true;
} }
@ -4685,7 +4663,7 @@ export class SwapArenaTagsAttr extends MoveEffectAttr {
} }
user.scene.queueMessage( `${getPokemonNameWithAffix(user)} swapped the battle effects affecting each side of the field!`); user.scene.queueMessage( i18next.t("moveTriggers:swapArenaTags", {pokemonName: getPokemonNameWithAffix(user)}));
return true; return true;
} }
} }
@ -4780,19 +4758,14 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
if (switchOutTarget.hp > 0) { if (switchOutTarget.hp > 0) {
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, switchOutTarget); applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, switchOutTarget);
// switchOut below sets the UI to select party(this is not a separate Phase), then adds a SwitchSummonPhase with selected 'mon // switchOut below sets the UI to select party(this is not a separate Phase), then adds a SwitchSummonPhase with selected 'mon
(switchOutTarget as PlayerPokemon).switchOut(this.batonPass, true).then(() => resolve(true)); (switchOutTarget as PlayerPokemon).switchOut(this.batonPass).then(() => resolve(true));
} else { } else {
resolve(false); resolve(false);
} }
return; return;
} else if (user.scene.currentBattle.battleType) { } else if (user.scene.currentBattle.battleType !== BattleType.WILD) {
// Switch out logic for the battle type // Switch out logic for trainer battles
switchOutTarget.resetTurnData(); switchOutTarget.leaveField(!this.batonPass);
switchOutTarget.resetSummonData();
switchOutTarget.hideInfo();
switchOutTarget.setVisible(false);
switchOutTarget.scene.field.remove(switchOutTarget);
user.scene.triggerPokemonFormChange(switchOutTarget, SpeciesFormChangeActiveTrigger, true);
if (switchOutTarget.hp > 0) { if (switchOutTarget.hp > 0) {
// for opponent switching out // for opponent switching out
@ -4917,7 +4890,7 @@ export class CopyTypeAttr extends MoveEffectAttr {
user.summonData.types = target.getTypes(true); user.summonData.types = target.getTypes(true);
user.updateInfo(); user.updateInfo();
user.scene.queueMessage(getPokemonMessage(user, `'s type\nchanged to match ${getPokemonNameWithAffix(target)}'s!`)); user.scene.queueMessage(i18next.t("moveTriggers:copyType", {pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target)}));
return true; return true;
} }
@ -5598,7 +5571,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr {
target.summonData.abilitySuppressed = true; target.summonData.abilitySuppressed = true;
target.scene.queueMessage(getPokemonMessage(target, "'s ability\nwas suppressed!")); target.scene.queueMessage(i18next.t("moveTriggers:suppressAbilities", {pokemonName: getPokemonNameWithAffix(target)}));
return true; return true;
} }
@ -6486,7 +6459,9 @@ export function initMoves() {
new StatusMove(Moves.SWEET_KISS, Type.FAIRY, 75, 10, -1, 0, 2) new StatusMove(Moves.SWEET_KISS, Type.FAIRY, 75, 10, -1, 0, 2)
.attr(ConfuseAttr), .attr(ConfuseAttr),
new SelfStatusMove(Moves.BELLY_DRUM, Type.NORMAL, -1, 10, -1, 0, 2) new SelfStatusMove(Moves.BELLY_DRUM, Type.NORMAL, -1, 10, -1, 0, 2)
.attr(HalfHpStatMaxAttr, BattleStat.ATK), .attr(CutHpStatBoostAttr, [BattleStat.ATK], 12, 2, (user) => {
user.scene.queueMessage(i18next.t("moveTriggers:cutOwnHpAndMaximizedStat", {pokemonName: getPokemonNameWithAffix(user), statName: getBattleStatName(BattleStat.ATK)}));
}),
new AttackMove(Moves.SLUDGE_BOMB, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 30, 0, 2) new AttackMove(Moves.SLUDGE_BOMB, Type.POISON, MoveCategory.SPECIAL, 90, 100, 10, 30, 0, 2)
.attr(StatusEffectAttr, StatusEffect.POISON) .attr(StatusEffectAttr, StatusEffect.POISON)
.ballBombMove(), .ballBombMove(),
@ -6670,6 +6645,7 @@ export function initMoves() {
.attr(StatChangeAttr, BattleStat.SPDEF, -1) .attr(StatChangeAttr, BattleStat.SPDEF, -1)
.ballBombMove(), .ballBombMove(),
new AttackMove(Moves.FUTURE_SIGHT, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 2) new AttackMove(Moves.FUTURE_SIGHT, Type.PSYCHIC, MoveCategory.SPECIAL, 120, 100, 10, -1, 0, 2)
.partial()
.attr(DelayedAttackAttr, ArenaTagType.FUTURE_SIGHT, ChargeAnim.FUTURE_SIGHT_CHARGING, i18next.t("moveTriggers:foresawAnAttack", {pokemonName: "{USER}"})), .attr(DelayedAttackAttr, ArenaTagType.FUTURE_SIGHT, ChargeAnim.FUTURE_SIGHT_CHARGING, i18next.t("moveTriggers:foresawAnAttack", {pokemonName: "{USER}"})),
new AttackMove(Moves.ROCK_SMASH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2) new AttackMove(Moves.ROCK_SMASH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2)
.attr(StatChangeAttr, BattleStat.DEF, -1), .attr(StatChangeAttr, BattleStat.DEF, -1),
@ -6958,6 +6934,7 @@ export function initMoves() {
.attr(ConfuseAttr) .attr(ConfuseAttr)
.pulseMove(), .pulseMove(),
new AttackMove(Moves.DOOM_DESIRE, Type.STEEL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 3) new AttackMove(Moves.DOOM_DESIRE, Type.STEEL, MoveCategory.SPECIAL, 140, 100, 5, -1, 0, 3)
.partial()
.attr(DelayedAttackAttr, ArenaTagType.DOOM_DESIRE, ChargeAnim.DOOM_DESIRE_CHARGING, i18next.t("moveTriggers:choseDoomDesireAsDestiny", {pokemonName: "{USER}"})), .attr(DelayedAttackAttr, ArenaTagType.DOOM_DESIRE, ChargeAnim.DOOM_DESIRE_CHARGING, i18next.t("moveTriggers:choseDoomDesireAsDestiny", {pokemonName: "{USER}"})),
new AttackMove(Moves.PSYCHO_BOOST, Type.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3) new AttackMove(Moves.PSYCHO_BOOST, Type.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3)
.attr(StatChangeAttr, BattleStat.SPATK, -2, true), .attr(StatChangeAttr, BattleStat.SPATK, -2, true),
@ -7928,7 +7905,7 @@ export function initMoves() {
.makesContact(false) .makesContact(false)
.partial(), .partial(),
new AttackMove(Moves.CLANGING_SCALES, Type.DRAGON, MoveCategory.SPECIAL, 110, 100, 5, -1, 0, 7) new AttackMove(Moves.CLANGING_SCALES, Type.DRAGON, MoveCategory.SPECIAL, 110, 100, 5, -1, 0, 7)
.attr(StatChangeAttr, BattleStat.DEF, -1, true) .attr(StatChangeAttr, BattleStat.DEF, -1, true, null, true, false, MoveEffectTrigger.HIT, true)
.soundBased() .soundBased()
.target(MoveTarget.ALL_NEAR_ENEMIES), .target(MoveTarget.ALL_NEAR_ENEMIES),
new AttackMove(Moves.DRAGON_HAMMER, Type.DRAGON, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 7), new AttackMove(Moves.DRAGON_HAMMER, Type.DRAGON, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 7),

View File

@ -1145,6 +1145,11 @@ export const pokemonEvolutions: PokemonEvolutions = {
new SpeciesEvolution(Species.PAWMOT, 32, null, null) new SpeciesEvolution(Species.PAWMOT, 32, null, null)
], ],
[Species.TANDEMAUS]: [ [Species.TANDEMAUS]: [
new SpeciesFormEvolution(Species.MAUSHOLD, "", "three", 25, null, new SpeciesEvolutionCondition(p => {
let ret = false;
p.scene.executeWithSeedOffset(() => ret = !Utils.randSeedInt(4), p.id);
return ret;
})),
new SpeciesEvolution(Species.MAUSHOLD, 25, null, null) new SpeciesEvolution(Species.MAUSHOLD, 25, null, null)
], ],
[Species.FIDOUGH]: [ [Species.FIDOUGH]: [

View File

@ -17287,7 +17287,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
], ],
[Species.DIPPLIN]: [ [Species.DIPPLIN]: [
[ EVOLVE_MOVE, Moves.DOUBLE_HIT ], [ EVOLVE_MOVE, Moves.DOUBLE_HIT ],
[ RELEARN_MOVE, Moves.INFESTATION ], [ RELEARN_MOVE, Moves.DRAGON_CHEER ], // Custom
[ 1, Moves.WITHDRAW ], [ 1, Moves.WITHDRAW ],
[ 1, Moves.SWEET_SCENT ], [ 1, Moves.SWEET_SCENT ],
[ 1, Moves.RECYCLE ], [ 1, Moves.RECYCLE ],
@ -18666,7 +18666,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 48, Moves.PIKA_PAPOW ], [ 48, Moves.PIKA_PAPOW ],
], ],
3: [ 3: [
[ EVOLVE_MOVE, Moves.METEOR_MASH ], [ 1, Moves.METEOR_MASH ],
[ 1, Moves.TAIL_WHIP ], [ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ], [ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.THUNDER_SHOCK ],
@ -18690,7 +18690,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 48, Moves.PIKA_PAPOW ], [ 48, Moves.PIKA_PAPOW ],
], ],
4: [ 4: [
[ EVOLVE_MOVE, Moves.ICICLE_CRASH ], [ 1, Moves.ICICLE_CRASH ],
[ 1, Moves.TAIL_WHIP ], [ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ], [ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.THUNDER_SHOCK ],
@ -18714,7 +18714,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 48, Moves.PIKA_PAPOW ], [ 48, Moves.PIKA_PAPOW ],
], ],
5: [ 5: [
[ EVOLVE_MOVE, Moves.DRAINING_KISS ], [ 1, Moves.DRAINING_KISS ],
[ 1, Moves.TAIL_WHIP ], [ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ], [ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.THUNDER_SHOCK ],
@ -18738,7 +18738,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 48, Moves.PIKA_PAPOW ], [ 48, Moves.PIKA_PAPOW ],
], ],
6: [ 6: [
[ EVOLVE_MOVE, Moves.ELECTRIC_TERRAIN ], [ 1, Moves.ELECTRIC_TERRAIN ],
[ 1, Moves.TAIL_WHIP ], [ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ], [ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.THUNDER_SHOCK ],
@ -18762,7 +18762,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 48, Moves.PIKA_PAPOW ], [ 48, Moves.PIKA_PAPOW ],
], ],
7: [ 7: [
[ EVOLVE_MOVE, Moves.FLYING_PRESS ], [ 1, Moves.FLYING_PRESS ],
[ 1, Moves.TAIL_WHIP ], [ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ], [ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.THUNDER_SHOCK ],
@ -18886,7 +18886,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
}, },
[Species.ROTOM]: { [Species.ROTOM]: {
1: [ 1: [
[ EVOLVE_MOVE, Moves.OVERHEAT ], [ 1, Moves.OVERHEAT ],
[ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.DOUBLE_TEAM ],
[ 1, Moves.ASTONISH ], [ 1, Moves.ASTONISH ],
[ 5, Moves.THUNDER_SHOCK ], [ 5, Moves.THUNDER_SHOCK ],
@ -18902,7 +18902,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 55, Moves.UPROAR ], [ 55, Moves.UPROAR ],
], ],
2: [ 2: [
[ EVOLVE_MOVE, Moves.HYDRO_PUMP ], [ 1, Moves.HYDRO_PUMP ],
[ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.DOUBLE_TEAM ],
[ 1, Moves.ASTONISH ], [ 1, Moves.ASTONISH ],
[ 5, Moves.THUNDER_SHOCK ], [ 5, Moves.THUNDER_SHOCK ],
@ -18918,7 +18918,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 55, Moves.UPROAR ], [ 55, Moves.UPROAR ],
], ],
3: [ 3: [
[ EVOLVE_MOVE, Moves.BLIZZARD ], [ 1, Moves.BLIZZARD ],
[ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.DOUBLE_TEAM ],
[ 1, Moves.ASTONISH ], [ 1, Moves.ASTONISH ],
[ 5, Moves.THUNDER_SHOCK ], [ 5, Moves.THUNDER_SHOCK ],
@ -18934,7 +18934,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 55, Moves.UPROAR ], [ 55, Moves.UPROAR ],
], ],
4: [ 4: [
[ EVOLVE_MOVE, Moves.AIR_SLASH ], [ 1, Moves.AIR_SLASH ],
[ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.DOUBLE_TEAM ],
[ 1, Moves.ASTONISH ], [ 1, Moves.ASTONISH ],
[ 5, Moves.THUNDER_SHOCK ], [ 5, Moves.THUNDER_SHOCK ],
@ -18950,7 +18950,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 55, Moves.UPROAR ], [ 55, Moves.UPROAR ],
], ],
5: [ 5: [
[ EVOLVE_MOVE, Moves.LEAF_STORM ], [ 1, Moves.LEAF_STORM ],
[ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.DOUBLE_TEAM ],
[ 1, Moves.ASTONISH ], [ 1, Moves.ASTONISH ],
[ 5, Moves.THUNDER_SHOCK ], [ 5, Moves.THUNDER_SHOCK ],

File diff suppressed because it is too large Load Diff

View File

@ -556,7 +556,7 @@ export class TrainerConfig {
const nameForCall = this.name.toLowerCase().replace(/\s/g, "_"); const nameForCall = this.name.toLowerCase().replace(/\s/g, "_");
this.name = i18next.t(`trainerNames:${nameForCall}`); this.name = i18next.t(`trainerNames:${nameForCall}`);
this.setTitle(title); this.setTitle(title);
this.setMoneyMultiplier(2.25); this.setMoneyMultiplier(2.5);
this.setBoss(); this.setBoss();
this.setStaticParty(); this.setStaticParty();
this.setBattleBgm("battle_plasma_boss"); this.setBattleBgm("battle_plasma_boss");
@ -1187,6 +1187,12 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE], [TrainerPoolTier.RARE]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE],
[TrainerPoolTier.SUPER_RARE]: [Species.DRATINI, Species.LARVITAR] [TrainerPoolTier.SUPER_RARE]: [Species.DRATINI, Species.LARVITAR]
}), }),
[TrainerType.ROCKET_ADMIN]: new TrainerConfig(++t).setHasGenders().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_rocket_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.RATTATA, Species.KOFFING, Species.EKANS, Species.GYARADOS, Species.TAUROS, Species.SCYTHER, Species.CUBONE, Species.GROWLITHE, Species.MURKROW, Species.GASTLY, Species.EXEGGCUTE, Species.VOLTORB],
[TrainerPoolTier.UNCOMMON]: [Species.PORYGON, Species.ALOLA_RATTATA, Species.ALOLA_SANDSHREW, Species.ALOLA_MEOWTH, Species.ALOLA_GRIMER, Species.ALOLA_GEODUDE],
[TrainerPoolTier.RARE]: [Species.DRATINI, Species.LARVITAR]
}),
[TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Magma Grunt Female").setHasDouble("Magma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.BALTOY, Species.BARBOACH], [TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY, Species.TORKOAL, Species.BALTOY, Species.BARBOACH],
@ -1194,6 +1200,12 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.HEATMOR], [TrainerPoolTier.RARE]: [Species.TRAPINCH, Species.HEATMOR],
[TrainerPoolTier.SUPER_RARE]: [Species.TURTONATOR, Species.CHARCADET] [TrainerPoolTier.SUPER_RARE]: [Species.TURTONATOR, Species.CHARCADET]
}), }),
[TrainerType.MAGMA_ADMIN]: new TrainerConfig(++t).setHasGenders().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.NUMEL, Species.POOCHYENA, Species.SLUGMA, Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA, Species.PHANPY, Species.SWINUB, Species.GLIGAR],
[TrainerPoolTier.UNCOMMON]: [Species.TRAPINCH, Species.HEATMOR],
[TrainerPoolTier.RARE]: [Species.TURTONATOR, Species.CHARCADET]
}),
[TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders("Aqua Grunt Female").setHasDouble("Aqua Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL ], [TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH, Species.SPHEAL ],
@ -1201,6 +1213,12 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.RARE]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA], [TrainerPoolTier.RARE]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA],
[TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO] [TrainerPoolTier.SUPER_RARE]: [Species.DONDOZO]
}), }),
[TrainerType.AQUA_ADMIN]: new TrainerConfig(++t).setHasGenders().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_aqua_magma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.CORPHISH, Species.ZIGZAGOON, Species.CLAMPERL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL, Species.QWILFISH ],
[TrainerPoolTier.UNCOMMON]: [Species.MANTINE, Species.BASCULEGION, Species.REMORAID, Species.ARROKUDA],
[TrainerPoolTier.RARE]: [Species.DONDOZO]
}),
[TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) [TrainerType.GALACTIC_GRUNT]: new TrainerConfig(++t).setHasGenders("Galactic Grunt Female").setHasDouble("Galactic Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY], [TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.CROAGUNK, Species.SHINX, Species.WURMPLE, Species.BRONZOR, Species.DRIFLOON, Species.BURMY],
@ -1208,6 +1226,12 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL], [TrainerPoolTier.RARE]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL],
[TrainerPoolTier.SUPER_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO] [TrainerPoolTier.SUPER_RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO]
}), }),
[TrainerType.GALACTIC_ADMIN]: new TrainerConfig(++t).setHasGenders().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_galactic_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.GLAMEOW, Species.STUNKY, Species.BRONZOR, Species.CARNIVINE, Species.GROWLITHE, Species.QWILFISH, Species.SNEASEL ],
[TrainerPoolTier.UNCOMMON]: [Species.HISUI_GROWLITHE, Species.HISUI_QWILFISH, Species.HISUI_SNEASEL],
[TrainerPoolTier.RARE]: [Species.HISUI_ZORUA, Species.HISUI_SLIGGOO]
}),
[TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) [TrainerType.PLASMA_GRUNT]: new TrainerConfig(++t).setHasGenders("Plasma Grunt Female").setHasDouble("Plasma Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH], [TrainerPoolTier.COMMON]: [ Species.PATRAT, Species.LILLIPUP, Species.PURRLOIN, Species.SCRAFTY, Species.WOOBAT, Species.VANILLITE, Species.SANDILE, Species.TRUBBISH],
@ -1215,6 +1239,12 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK], [TrainerPoolTier.RARE]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK],
[TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT] [TrainerPoolTier.SUPER_RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT]
}), }),
[TrainerType.PLASMA_SAGE]: new TrainerConfig(++t).setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_plasma_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.SCRAFTY, Species.LILLIPUP, Species.PURRLOIN, Species.FRILLISH, Species.VENIPEDE, Species.GOLETT, Species.TIMBURR, Species.DARUMAKA, Species.AMOONGUSS],
[TrainerPoolTier.UNCOMMON]: [Species.PAWNIARD, Species.VULLABY, Species.ZORUA, Species.DRILBUR, Species.KLINK],
[TrainerPoolTier.RARE]: [Species.DRUDDIGON, Species.BOUFFALANT, Species.AXEW, Species.DEINO, Species.DURANT]
}),
[TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene)) [TrainerType.FLARE_GRUNT]: new TrainerConfig(++t).setHasGenders("Flare Grunt Female").setHasDouble("Flare Grunts").setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK], [TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.PONYTA, Species.INKAY, Species.HOUNDOUR, Species.SKORUPI, Species.SCRAFTY, Species.CROAGUNK],
@ -1222,6 +1252,12 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD], [TrainerPoolTier.RARE]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD],
[TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.DRUDDIGON] [TrainerPoolTier.SUPER_RARE]: [Species.NOIVERN, Species.DRUDDIGON]
}), }),
[TrainerType.FLARE_ADMIN]: new TrainerConfig(++t).setHasGenders().setMoneyMultiplier(1.5).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm("battle_plasma_grunt").setMixedBattleBgm("battle_flare_grunt").setVictoryBgm("victory_team_plasma").setPartyTemplateFunc(scene => getEvilGruntPartyTemplate(scene))
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [ Species.FLETCHLING, Species.LITLEO, Species.INKAY, Species.HELIOPTILE, Species.ELECTRIKE, Species.SKRELP, Species.GULPIN, Species.PURRLOIN, Species.POOCHYENA, Species.SCATTERBUG],
[TrainerPoolTier.UNCOMMON]: [Species.LITWICK, Species.SNEASEL, Species.PANCHAM, Species.PAWNIARD],
[TrainerPoolTier.RARE]: [Species.NOIVERN, Species.DRUDDIGON]
}),
[TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)).initForGymLeader(signatureSpecies["BROCK"],true, Type.ROCK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), [TrainerType.BROCK]: new TrainerConfig((t = TrainerType.BROCK)).initForGymLeader(signatureSpecies["BROCK"],true, Type.ROCK).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"),
[TrainerType.MISTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MISTY"],false, Type.WATER).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), [TrainerType.MISTY]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["MISTY"],false, Type.WATER).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"),
[TrainerType.LT_SURGE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LT_SURGE"],true, Type.ELECTRIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"), [TrainerType.LT_SURGE]: new TrainerConfig(++t).initForGymLeader(signatureSpecies["LT_SURGE"],true, Type.ELECTRIC).setBattleBgm("battle_kanto_gym").setMixedBattleBgm("battle_kanto_gym"),
@ -1368,7 +1404,7 @@ export const trainerConfigs: TrainerConfigs = {
p.generateAndPopulateMoveset(); p.generateAndPopulateMoveset();
p.generateName(); p.generateName();
})), })),
[TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion(signatureSpecies["STEVEN"],true).setBattleBgm("battle_hoenn_champion").setMixedBattleBgm("battle_hoenn_champion").setHasDouble("steven_wallace_double").setDoubleTrainerType(TrainerType.WALLACE).setDoubleTitle("champion_double") [TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion(signatureSpecies["STEVEN"],true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("steven_wallace_double").setDoubleTrainerType(TrainerType.WALLACE).setDoubleTitle("champion_double")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY], TrainerSlot.TRAINER, true, p => { .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset(); p.generateAndPopulateMoveset();
})) }))
@ -1377,7 +1413,7 @@ export const trainerConfigs: TrainerConfigs = {
p.generateAndPopulateMoveset(); p.generateAndPopulateMoveset();
p.generateName(); p.generateName();
})), })),
[TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion(signatureSpecies["WALLACE"],true).setBattleBgm("battle_hoenn_champion").setMixedBattleBgm("battle_hoenn_champion").setHasDouble("wallace_steven_double").setDoubleTrainerType(TrainerType.STEVEN).setDoubleTitle("champion_double") [TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion(signatureSpecies["WALLACE"],true).setBattleBgm("battle_hoenn_champion_g5").setMixedBattleBgm("battle_hoenn_champion_g6").setHasDouble("wallace_steven_double").setDoubleTrainerType(TrainerType.STEVEN).setDoubleTitle("champion_double")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => {
p.abilityIndex = 1; // Drizzle p.abilityIndex = 1; // Drizzle
p.generateAndPopulateMoveset(); p.generateAndPopulateMoveset();

View File

@ -53,11 +53,17 @@ export enum TrainerType {
WORKER, WORKER,
YOUNGSTER, YOUNGSTER,
ROCKET_GRUNT, ROCKET_GRUNT,
ROCKET_ADMIN,
MAGMA_GRUNT, MAGMA_GRUNT,
MAGMA_ADMIN,
AQUA_GRUNT, AQUA_GRUNT,
AQUA_ADMIN,
GALACTIC_GRUNT, GALACTIC_GRUNT,
GALACTIC_ADMIN,
PLASMA_GRUNT, PLASMA_GRUNT,
PLASMA_SAGE,
FLARE_GRUNT, FLARE_GRUNT,
FLARE_ADMIN,
ROCKET_BOSS_GIOVANNI_1, ROCKET_BOSS_GIOVANNI_1,
ROCKET_BOSS_GIOVANNI_2, ROCKET_BOSS_GIOVANNI_2,
MAXIE, MAXIE,

View File

@ -639,9 +639,13 @@ export class Arena {
} }
/** /**
* Clears terrain and arena tags when entering new biome or trainer battle. * Clears weather, terrain and arena tags when entering new biome or trainer battle.
*/ */
resetArenaEffects(): void { resetArenaEffects(): void {
// Don't reset weather if a Biome's permanent weather is active
if (this.weather?.turnsLeft !== 0) {
this.trySetWeather(WeatherType.NONE, false);
}
this.trySetTerrain(TerrainType.NONE, false, true); this.trySetTerrain(TerrainType.NONE, false, true);
this.removeAllTags(); this.removeAllTags();
} }

View File

@ -84,6 +84,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
public friendship: integer; public friendship: integer;
public metLevel: integer; public metLevel: integer;
public metBiome: Biome | -1; public metBiome: Biome | -1;
public metSpecies: Species;
public luck: integer; public luck: integer;
public pauseEvolutions: boolean; public pauseEvolutions: boolean;
public pokerus: boolean; public pokerus: boolean;
@ -173,6 +174,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.metLevel = dataSource.metLevel || 5; this.metLevel = dataSource.metLevel || 5;
this.luck = dataSource.luck; this.luck = dataSource.luck;
this.metBiome = dataSource.metBiome; this.metBiome = dataSource.metBiome;
this.metSpecies = dataSource.metSpecies ?? (this.metBiome !== -1 ? this.species.speciesId : this.species.getRootSpeciesId(true));
this.pauseEvolutions = dataSource.pauseEvolutions; this.pauseEvolutions = dataSource.pauseEvolutions;
this.pokerus = !!dataSource.pokerus; this.pokerus = !!dataSource.pokerus;
this.fusionSpecies = dataSource.fusionSpecies instanceof PokemonSpecies ? dataSource.fusionSpecies : getPokemonSpecies(dataSource.fusionSpecies); this.fusionSpecies = dataSource.fusionSpecies instanceof PokemonSpecies ? dataSource.fusionSpecies : getPokemonSpecies(dataSource.fusionSpecies);
@ -213,6 +215,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.friendship = species.baseFriendship; this.friendship = species.baseFriendship;
this.metLevel = level; this.metLevel = level;
this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1; this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1;
this.metSpecies = species.speciesId;
this.pokerus = false; this.pokerus = false;
if (level > 1) { if (level > 1) {
@ -885,11 +888,40 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
} }
/** /**
* All moves that could be relearned by this pokemon at this point. Used for memory mushrooms. * Checks which egg moves have been unlocked for the {@linkcode Pokemon} based
* @returns {Moves[]} The valid moves * on the species it was met at or by the first {@linkcode Pokemon} in its evolution
* line that can act as a starter and provides those egg moves.
* @returns an array of {@linkcode Moves}, the length of which is determined by how many
* egg moves are unlocked for that species.
*/
getUnlockedEggMoves(): Moves[] {
const moves: Moves[] = [];
const species = this.metSpecies in speciesEggMoves ? this.metSpecies : this.getSpeciesForm(true).getRootSpeciesId(true);
if (species in speciesEggMoves) {
for (let i = 0; i < 4; i++) {
if (this.scene.gameData.starterData[species].eggMoves & (1 << i)) {
moves.push(speciesEggMoves[species][i]);
}
}
}
return moves;
}
/**
* Gets all possible learnable level moves for the {@linkcode Pokemon},
* excluding any moves already known.
*
* Available egg moves are only included if the {@linkcode Pokemon} was
* in the starting party of the run.
* @returns an array of {@linkcode Moves}, the length of which is determined
* by how many learnable moves there are for the {@linkcode Pokemon}.
*/ */
getLearnableLevelMoves(): Moves[] { getLearnableLevelMoves(): Moves[] {
return this.getLevelMoves(1, true, false, true).map(lm => lm[1]).filter(lm => !this.moveset.filter(m => m.moveId === lm).length).filter((move: Moves, i: integer, array: Moves[]) => array.indexOf(move) === i); let levelMoves = this.getLevelMoves(1, true).map(lm => lm[1]);
if (this.metBiome === -1) {
levelMoves = this.getUnlockedEggMoves().concat(levelMoves);
}
return levelMoves.filter(lm => !this.moveset.some(m => m.moveId === lm));
} }
/** /**
@ -3129,6 +3161,23 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
return this.randSeedInt((max - min) + 1, min); return this.randSeedInt((max - min) + 1, min);
} }
/**
* Causes a Pokemon to leave the field (such as in preparation for a switch out/escape).
* @param clearEffects Indicates if effects should be cleared (true) or passed
* to the next pokemon, such as during a baton pass (false)
*/
leaveField(clearEffects: boolean = true) {
this.resetTurnData();
if (clearEffects) {
this.resetSummonData();
this.resetBattleData();
}
this.hideInfo();
this.setVisible(false);
this.scene.field.remove(this);
this.scene.triggerPokemonFormChange(this, SpeciesFormChangeActiveTrigger, true);
}
destroy(): void { destroy(): void {
this.battleInfo?.destroy(); this.battleInfo?.destroy();
super.destroy(); super.destroy();
@ -3173,7 +3222,7 @@ export class PlayerPokemon extends Pokemon {
} }
if (!dataSource) { if (!dataSource) {
this.generateAndPopulateMoveset(); this.moveset = [];
} }
this.generateCompatibleTms(); this.generateCompatibleTms();
} }
@ -3240,25 +3289,21 @@ export class PlayerPokemon extends Pokemon {
return true; return true;
} }
switchOut(batonPass: boolean, removeFromField: boolean = false): Promise<void> { /**
* Causes this mon to leave the field (via {@linkcode leaveField}) and then
* opens the party switcher UI to switch a new mon in
* @param batonPass Indicates if this switch was caused by a baton pass (and
* thus should maintain active mon effects)
*/
switchOut(batonPass: boolean): Promise<void> {
return new Promise(resolve => { return new Promise(resolve => {
this.resetTurnData(); this.leaveField(!batonPass);
if (!batonPass) {
this.resetSummonData();
}
this.hideInfo();
this.setVisible(false);
this.scene.ui.setMode(Mode.PARTY, PartyUiMode.FAINT_SWITCH, this.getFieldIndex(), (slotIndex: integer, option: PartyOption) => { this.scene.ui.setMode(Mode.PARTY, PartyUiMode.FAINT_SWITCH, this.getFieldIndex(), (slotIndex: integer, option: PartyOption) => {
if (slotIndex >= this.scene.currentBattle.getBattlerCount() && slotIndex < 6) { if (slotIndex >= this.scene.currentBattle.getBattlerCount() && slotIndex < 6) {
this.scene.prependToPhase(new SwitchSummonPhase(this.scene, this.getFieldIndex(), slotIndex, false, batonPass), MoveEndPhase); this.scene.prependToPhase(new SwitchSummonPhase(this.scene, this.getFieldIndex(), slotIndex, false, batonPass), MoveEndPhase);
} }
if (removeFromField) { this.scene.ui.setMode(Mode.MESSAGE).then(resolve);
this.setVisible(false);
this.scene.field.remove(this);
this.scene.triggerPokemonFormChange(this, SpeciesFormChangeActiveTrigger, true);
}
this.scene.ui.setMode(Mode.MESSAGE).then(() => resolve());
}, PartyUiHandler.FilterNonFainted); }, PartyUiHandler.FilterNonFainted);
}); });
} }
@ -4075,6 +4120,7 @@ export class EnemyPokemon extends Pokemon {
this.pokeball = pokeballType; this.pokeball = pokeballType;
this.metLevel = this.level; this.metLevel = this.level;
this.metBiome = this.scene.arena.biomeType; this.metBiome = this.scene.arena.biomeType;
this.metSpecies = this.species.speciesId;
const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this); const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this);
party.push(newPokemon); party.push(newPokemon);
ret = newPokemon; ret = newPokemon;

View File

@ -121,8 +121,8 @@ export default class Trainer extends Phaser.GameObjects.Container {
// Determine the title to include based on the configuration and includeTitle flag. // Determine the title to include based on the configuration and includeTitle flag.
let title = includeTitle && this.config.title ? this.config.title : null; let title = includeTitle && this.config.title ? this.config.title : null;
const evilTeamTitles = ["grunt", "admin", "sage"];
if (this.name === "" && name.toLowerCase().includes("grunt")) { if (this.name === "" && evilTeamTitles.some(t => name.toLocaleLowerCase().includes(t))) {
// This is a evil team grunt so we localize it by only using the "name" as the title // This is a evil team grunt so we localize it by only using the "name" as the title
title = i18next.t(`trainerClasses:${name.toLowerCase().replace(/\s/g, "_")}`); title = i18next.t(`trainerClasses:${name.toLowerCase().replace(/\s/g, "_")}`);
console.log("Localized grunt name: " + title); console.log("Localized grunt name: " + title);

View File

@ -35,12 +35,12 @@ export const abilityTriggers: SimpleTranslationEntries = {
"battlerTagImmunity": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert {{battlerTagName}}!", "battlerTagImmunity": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert {{battlerTagName}}!",
"forewarn": "Vorwarnung von {{pokemonNameWithAffix}}: Konzentraion auf {{moveName}}!", "forewarn": "Vorwarnung von {{pokemonNameWithAffix}}: Konzentraion auf {{moveName}}!",
"frisk": "{{pokemonNameWithAffix}} hat die Fähigkeit {{opponentAbilityName}} von {{opponentName}} erschnüffelt!", "frisk": "{{pokemonNameWithAffix}} hat die Fähigkeit {{opponentAbilityName}} von {{opponentName}} erschnüffelt!",
"postWeatherLapseHeal": "{{abilityName}} von {{pokemonName}} füllte einige KP auf!", "postWeatherLapseHeal": "{{abilityName}} von {{pokemonNameWithAffix}} füllte einige KP auf!",
"postWeatherLapseDamage": "{{pokemonNameWithAffix}} wurde durch {{abilityName}} verletzt!", "postWeatherLapseDamage": "{{pokemonNameWithAffix}} wurde durch {{abilityName}} verletzt!",
"postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} hat {{berryName}} geerntet!", "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} hat {{berryName}} geerntet!",
"postTurnHeal": "{{abilityName}} von {{pokemonName}} füllte einige KP auf!", "postTurnHeal": "{{abilityName}} von {{pokemonNameWithAffix}} füllte einige KP auf!",
"fetchBall": "{{pokemonNameWithAffix}} hat einen {{pokeballName}} gefunden!", "fetchBall": "{{pokemonNameWithAffix}} hat einen {{pokeballName}} gefunden!",
"healFromBerryUse": "{{abilityName}} von {{pokemonName}} füllte einige KP auf!", "healFromBerryUse": "{{abilityName}} von {{pokemonNameWithAffix}} füllte einige KP auf!",
"arenaTrap": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert den Tausch!", "arenaTrap": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert den Tausch!",
"postBattleLoot": "{{pokemonNameWithAffix}} hebt {{itemName}} auf!", "postBattleLoot": "{{pokemonNameWithAffix}} hebt {{itemName}} auf!",
"postFaintContactDamage": "{{abilityName}} von {{pokemonNameWithAffix}} schadet seinem Angreifer!", "postFaintContactDamage": "{{abilityName}} von {{pokemonNameWithAffix}} schadet seinem Angreifer!",

View File

@ -5,7 +5,8 @@ export const bgmName: SimpleTranslationEntries = {
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "S2W2 Vs. Kanto Champion", "battle_kanto_champion": "S2W2 Vs. Kanto Champion",
"battle_johto_champion": "S2W2 Vs. Johto Champion", "battle_johto_champion": "S2W2 Vs. Johto Champion",
"battle_hoenn_champion": "S2W2 Vs. Hoenn Champion", "battle_hoenn_champion_g5": "S2W2 Vs. Hoenn Champion",
"battle_hoenn_champion_g6": "ORAS Vs. Hoenn Champion",
"battle_sinnoh_champion": "S2W2 Vs. Champion Cynthia", "battle_sinnoh_champion": "S2W2 Vs. Champion Cynthia",
"battle_champion_alder": "SW Vs. Champion Lauro", "battle_champion_alder": "SW Vs. Champion Lauro",
"battle_champion_iris": "S2W2 Vs. Champion Lilia", "battle_champion_iris": "S2W2 Vs. Champion Lilia",

View File

@ -378,6 +378,19 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "Das war mal wieder ein Schuss in den Ofen!" 1: "Das war mal wieder ein Schuss in den Ofen!"
}, },
}, },
"rocket_admin": {
"encounter": {
1: "Oh? Du wagst es, dich Team Rocket zu widersetzen? Du wirst es bereuen.",
2: "Du glaubst, du kannst uns aufhalten? Naiver Narr!",
3: "Ich werde dir die wahre Macht von Team Rocket zeigen!"
},
"victory": {
1: "Nein! Verzeih mir, Giovanni!",
2: "Wie konnte das geschehen?",
3: "Urgh... Du warst zu stark..."
},
},
"firebreather": { "firebreather": {
"encounter": { "encounter": {
1: "Meine Flammen werden dich verschlingen!", 1: "Meine Flammen werden dich verschlingen!",
@ -410,6 +423,20 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "Wie kann das sein? Ich bin Teil vom mächtigen Team Magma! Wir wollen doch nur die Welt verbessern…" 1: "Wie kann das sein? Ich bin Teil vom mächtigen Team Magma! Wir wollen doch nur die Welt verbessern…"
}, },
}, },
"magma_admin": {
"encounter": {
1: `Hahaha! Du hast den ganzen weiten Weg auf dich genommen! Aber du bist zu spät!
$Unsere Mission ist schon fast abgeschlossen!`,
2: `Du willst dich in Team Magmas Angelegenheiten einmischen? Du bist so süß, dass es ekelhaft ist!
$Ich werde dich ein für alle Mal erledigen!`,
3: "Ich werde dir zeigen, was wahrer Schmerz ist! Mach dich bereit!",
},
"victory": {
1: "Hahaha! Ouch! Ich habe wohl verloren...",
2: "Du bist ekelhaft stark!",
3: "Da habe ich meine eigene Medizin zu schmecken bekommen!"
},
},
"aqua_grunt": { "aqua_grunt": {
"encounter": { "encounter": {
1: "Du willst dich also mit Team Aqua anlegen? Du traust dich ja was… Dich werfe ich über Bord!", 1: "Du willst dich also mit Team Aqua anlegen? Du traust dich ja was… Dich werfe ich über Bord!",
@ -418,6 +445,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "Vielleicht sollte ich wohl lieber selber über die Planke gehen…", 1: "Vielleicht sollte ich wohl lieber selber über die Planke gehen…",
}, },
}, },
"aqua_admin": {
"encounter": {
1: "Ich bin eine Stufe über den Rüpeln, die du bisher gesehen hast. Ich werde dich pulverisieren!",
2: "Hmmm? Wer ist das? Wer ist dieses verwöhnte Gör?",
3: "Was machst du hier? Bist du uns gefolgt? Dann müssen wir dich wohl loswerden!"
},
"victory": {
1: "Also habe ich auch verloren...",
2: "Ahhh?! War ich zu nachsichtig mit dir?!",
3: "W-was war das?"
},
},
"galactic_grunt": { "galactic_grunt": {
"encounter": { "encounter": {
1: "Team Galaktik wird die Welt in eine bessere Welt verwandeln! Und du wirst uns nicht aufhalten!" 1: "Team Galaktik wird die Welt in eine bessere Welt verwandeln! Und du wirst uns nicht aufhalten!"
@ -426,6 +465,19 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "Zyrus wird uns für diese Niederlage bestrafen…" 1: "Zyrus wird uns für diese Niederlage bestrafen…"
}, },
}, },
"galactic_admin": {
"encounter": {
1: "Ich bin einer der Commander von Team Galaktik. Wir werden Zyrus' Traum verwirklichen!",
2: `Alles, was sich Team Galaktik widersetzt, muss zerschlagen werden!
$Selbst der Gedanke an Widerstand wird nicht toleriert!`,
3: "Was ist los? Sag mir nicht, dass du zitterst? Mach ich dir Angst? Gut so! Knie nieder!"
},
"victory": {
1: "Das kann nicht sein?! Ich habe verloren?! Du... du freches Gör!",
2: "Du, mein Freund, bist stark! Aber widestand ist zwecklos! Team Galaktik wird siegen!",
3: "Gegen ein Kind zu verlieren... Meine Unachtsamkeit wird mir nicht verziehen werden..."
},
},
"plasma_grunt": { "plasma_grunt": {
"encounter": { "encounter": {
1: "Pokémon sollten frei sein! Team Plasma wird sie befreien!" 1: "Pokémon sollten frei sein! Team Plasma wird sie befreien!"
@ -434,6 +486,19 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "Wie konnte ich verlieren? Ich dachte, ich würde die Welt retten…" 1: "Wie konnte ich verlieren? Ich dachte, ich würde die Welt retten…"
}, },
}, },
"plasma_sage": {
"encounter": {
1: "Du könntest eine Bedrohung für Team Plasma werden, also werden wir dich hier eliminieren!",
2: "Oh, ernsthaft... Ich hatte nicht erwartet, kämpfen zu müssen!",
3: `Du bist ein beeindruckender Trainer, dass du es so weit geschafft hast.
$Als Weiser von Team Plasma werde ich dich besiegen!`
},
"victory": {
1: "G-Cis...",
2: "Es ist bitterkalt. Ich zittere. Ich leide.",
3: "Hm. Du bist ein klügerer Trainer, als ich erwartet hatte. Ich bin beeindruckt."
},
},
"flare_grunt": { "flare_grunt": {
"encounter": { "encounter": {
1: `Ich bin ein Mitglied von Team Flare! Das sieht man mir doch an. Mein Stil ist unverkennbar! 1: `Ich bin ein Mitglied von Team Flare! Das sieht man mir doch an. Mein Stil ist unverkennbar!
@ -443,6 +508,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "Stil ist wohl doch nicht alles…" 1: "Stil ist wohl doch nicht alles…"
}, },
}, },
"flare_admin": {
"encounter": {
1: "Ah ha ha! Es wäre mir ein Vergnügen. Komm schon, kleiner Trainer! Zeig mir, was du drauf hast!",
2: "Wir von Team Flare sind die einzigen, die die Schönheit der Welt wirklich schätzen!",
3: "Ich habe auf dich gewartet! Lass mich ein wenig an dir forschen! Komm, lass uns beginnen!"
},
"victory": {
1: "Du bist ziemlich stark. Oh ja, sehr stark, in der Tat.",
2: "Es scheint als hätte ich mich geirrt… Der Sieger steht fest.",
3: "Wunderbar! Erstaunlich! Du hast enormes Geschick und dieser Mut!"
},
},
"rocket_boss_giovanni_1": { "rocket_boss_giovanni_1": {
"encounter": { "encounter": {
1: `Ich bin beeindruckt, du hast es bis hierher geschafft! 1: `Ich bin beeindruckt, du hast es bis hierher geschafft!
@ -476,7 +553,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
$Wir brauchen mehr Landmassen um zu leben! Team Magma wird dieses Ziel mit aller Macht erreichen!` $Wir brauchen mehr Landmassen um zu leben! Team Magma wird dieses Ziel mit aller Macht erreichen!`
}, },
"victory": { "victory": {
1:"Ugh! Das entspricht nicht meinen Berechnungen! Wie konnte ich verlieren? Wir sehen uns wieder!" 1: "Ugh! Das entspricht nicht meinen Berechnungen! Wie konnte ich verlieren? Wir sehen uns wieder!"
}, },
"defeat": { "defeat": {
1: "Team Magma wird weiterhin die Welt verbessern!" 1: "Team Magma wird weiterhin die Welt verbessern!"
@ -542,7 +619,7 @@ export const PGMdialogue: DialogueTranslationEntries = {
}, },
"plasma_boss_ghetsis_1": { "plasma_boss_ghetsis_1": {
"encounter": { "encounter": {
1:"Ich werde nicht zulassen, dass mich jemand aufhält! Egal wer es auch sein mag!" 1: "Ich werde nicht zulassen, dass mich jemand aufhält! Egal wer es auch sein mag!"
}, },
"victory": { "victory": {
1: "Wie kann das sein? Ich bin der Schöpfer von Team Plasma! Ich bin perfekt!" 1: "Wie kann das sein? Ich bin der Schöpfer von Team Plasma! Ich bin perfekt!"
@ -2604,7 +2681,7 @@ export const PGFbattleSpecDialogue: SimpleTranslationEntries = PGMbattleSpecDial
// Dialogue that does not fit into any other category (e.g. tutorial messages, or the end of the game). For when the player character is male // Dialogue that does not fit into any other category (e.g. tutorial messages, or the end of the game). For when the player character is male
export const PGMmiscDialogue: SimpleTranslationEntries = { export const PGMmiscDialogue: SimpleTranslationEntries = {
"ending": "ending":
`@c{smile}Oh? Du hast gewonnen?@d{96} @c{smile_eclosed}Ich schätze, das hätte ich wissen sollen. `@c{smile}Oh? Du hast gewonnen?@d{96} @c{smile_eclosed}Ich schätze, das hätte ich wissen sollen.
$Aber, du bist jetzt zurück. $Aber, du bist jetzt zurück.
$@c{smile}Es ist vorbei.@d{64} Du hast die Schleife beendet. $@c{smile}Es ist vorbei.@d{64} Du hast die Schleife beendet.
$@c{serious_smile_fists}Du hast auch deinen Traum erfüllt, nicht wahr?\nDu hast nicht einmal verloren. $@c{serious_smile_fists}Du hast auch deinen Traum erfüllt, nicht wahr?\nDu hast nicht einmal verloren.
@ -2615,7 +2692,7 @@ export const PGMmiscDialogue: SimpleTranslationEntries = {
$@c{serious_smile_fists}Vielleicht können wir, wenn wir zurück sind, noch einen Kampf haben? $@c{serious_smile_fists}Vielleicht können wir, wenn wir zurück sind, noch einen Kampf haben?
$Wenn du dazu bereit bist.`, $Wenn du dazu bereit bist.`,
"ending_female": "ending_female":
`@c{shock}Du bist zurück?@d{32} Bedeutet das…@d{96} du hast gewonnen?! `@c{shock}Du bist zurück?@d{32} Bedeutet das…@d{96} du hast gewonnen?!
$@c{smile_ehalf}Ich hätte wissen sollen, dass du es in dir hast. $@c{smile_ehalf}Ich hätte wissen sollen, dass du es in dir hast.
$@c{smile_eclosed}Natürlich ich hatte immer dieses Gefühl. $@c{smile_eclosed}Natürlich ich hatte immer dieses Gefühl.
$@c{smile}Es ist jetzt vorbei, richtig? Du hast die Schleife beendet. $@c{smile}Es ist jetzt vorbei, richtig? Du hast die Schleife beendet.

View File

@ -3,16 +3,28 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const filterBar: SimpleTranslationEntries = { export const filterBar: SimpleTranslationEntries = {
"genFilter": "Gen.", "genFilter": "Gen.",
"typeFilter": "Typ", "typeFilter": "Typ",
"caughtFilter": "Gefangen",
"unlocksFilter": "Freisch.", "unlocksFilter": "Freisch.",
"winFilter": "Abschluss", "miscFilter": "Sonst.",
"sortFilter": "Sort.", "sortFilter": "Sort.",
"all": "Alle", "all": "Alle",
"normal": "Normal", "normal": "Normal",
"uncaught": "Nicht gefangen", "uncaught": "Nicht gefangen",
"passive": "Passive",
"passiveUnlocked": "Passive freigeschaltet", "passiveUnlocked": "Passive freigeschaltet",
"passiveLocked": "Passive gesperrt", "passiveLocked": "Passive gesperrt",
"costReduction": "Cost Reduction",
"costReductionUnlocked": "Cost Reduction Unlocked",
"costReductionLocked": "Cost Reduction Locked",
"ribbon": "Band",
"hasWon": "Hat Klassik-Modus gewonnen", "hasWon": "Hat Klassik-Modus gewonnen",
"hasNotWon": "Hat Klassik-Modus nicht gewonnen", "hasNotWon": "Hat Klassik-Modus nicht gewonnen",
"hiddenAbility": "Hidden Ability",
"hasHiddenAbility": "Hidden Ability - Yes",
"noHiddenAbility": "Hidden Ability - No",
"pokerus": "Pokerus",
"hasPokerus": "Pokerus - Yes",
"noPokerus": "Pokerus - No",
"sortByNumber": "Pokédex-Nummer", "sortByNumber": "Pokédex-Nummer",
"sortByCost": "Kosten", "sortByCost": "Kosten",
"sortByCandies": "Anzahl Bonbons", "sortByCandies": "Anzahl Bonbons",

View File

@ -4,8 +4,8 @@ export const moveTriggers: SimpleTranslationEntries = {
"hitWithRecoil" : "{{pokemonName}} erleidet Schaden durch Rückstoß!", "hitWithRecoil" : "{{pokemonName}} erleidet Schaden durch Rückstoß!",
"cutHpPowerUpMove": "{{pokemonName}} nutzt seine KP um seine Attacke zu verstärken!", "cutHpPowerUpMove": "{{pokemonName}} nutzt seine KP um seine Attacke zu verstärken!",
"absorbedElectricity": "{{pokemonName}} absorbiert elektrische Energie!", "absorbedElectricity": "{{pokemonName}} absorbiert elektrische Energie!",
"switchedStatChanges": "{{pokemonName}}tauschte die Statuswerteveränderungen mit dem Ziel!", "switchedStatChanges": "{{pokemonName}} tauschte die Statuswerteveränderungen mit dem Ziel!",
"goingAllOutForAttack": "{{pokemonName}}legt sich ins Zeug!", "goingAllOutForAttack": "{{pokemonName}} legt sich ins Zeug!",
"regainedHealth": "{{pokemonName}} erholt sich!", "regainedHealth": "{{pokemonName}} erholt sich!",
"keptGoingAndCrashed": "{{pokemonName}} springt daneben und verletzt sich!", "keptGoingAndCrashed": "{{pokemonName}} springt daneben und verletzt sich!",
"fled": "{{pokemonName}} ist geflüchtet!", "fled": "{{pokemonName}} ist geflüchtet!",
@ -35,7 +35,7 @@ export const moveTriggers: SimpleTranslationEntries = {
"isOverflowingWithSpacePower": "Kosmische Kräfte strömen aus {{pokemonName}}!", "isOverflowingWithSpacePower": "Kosmische Kräfte strömen aus {{pokemonName}}!",
"usedUpAllElectricity": "{{pokemonName}} braucht seinen Strom komplett auf!", "usedUpAllElectricity": "{{pokemonName}} braucht seinen Strom komplett auf!",
"stoleItem": "{{pokemonName}} hat {{targetName}} das Item {{itemName}} geklaut!", "stoleItem": "{{pokemonName}} hat {{targetName}} das Item {{itemName}} geklaut!",
"incineratedItem": "{{itemName}} von {{targetName}} ist verbrannt und somit nutzlos geworden!", "incineratedItem": "{{pokemonName}} hat {{itemName}} von {{targetName}} verbrannt. Es ist somit nutzlos geworden!",
"knockedOffItem": "{{pokemonName}} schlägt das Item {{itemName}} von {{targetName}} weg!", "knockedOffItem": "{{pokemonName}} schlägt das Item {{itemName}} von {{targetName}} weg!",
"tookMoveAttack": "{{pokemonName}} wurde von {{moveName}} getroffen!", "tookMoveAttack": "{{pokemonName}} wurde von {{moveName}} getroffen!",
"cutOwnHpAndMaximizedStat": "{{pokemonName}} nutzt seine KP und maximiert dadurch seinen {{statName}}-Wert!", "cutOwnHpAndMaximizedStat": "{{pokemonName}} nutzt seine KP und maximiert dadurch seinen {{statName}}-Wert!",
@ -50,5 +50,13 @@ export const moveTriggers: SimpleTranslationEntries = {
"transformedIntoTarget": "{{pokemonName}} verwandelt sich in {{targetName}}!", "transformedIntoTarget": "{{pokemonName}} verwandelt sich in {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} versucht, den Angreifer mit sich zu nehmen!", "tryingToTakeFoeDown": "{{pokemonName}} versucht, den Angreifer mit sich zu nehmen!",
"addType": "{{pokemonName}} nimmt zusätzlich den Typ {{typeName}} an!", "addType": "{{pokemonName}} nimmt zusätzlich den Typ {{typeName}} an!",
"cannotUseMove": "{{pokemonName}} kann {{moveName}} nicht einsetzen!" "cannotUseMove": "{{pokemonName}} kann {{moveName}} nicht einsetzen!",
"healHp": "KP von {{pokemonName}} wurden aufgefrischt!",
"sacrificialFullRestore": "Das Heilopfer von {{pokemonName}} erreicht sein Ziel!",
"invertStats": "Alle Statusveränderungen von {{pokemonName}} wurden invertiert!",
"resetStats": "Die Statusveränderungen von {{pokemonName}} wurden aufgehoben!",
"faintCountdown": "{{pokemonName}} geht nach {{turnCount}} Runden K.O.!",
"copyType": "{{pokemonName}} hat den Typ von {{targetPokemonName}} angenommen!",
"suppressAbilities": "Die Fähigkeit von {{pokemonName}} wirkt nicht mehr!",
"swapArenaTags": "{{pokemonName}} hat die Effekte, die auf den beiden Seiten des Kampffeldes wirken, miteinander getauscht!",
} as const; } as const;

View File

@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
*/ */
export const starterSelectUiHandler: SimpleTranslationEntries = { export const starterSelectUiHandler: SimpleTranslationEntries = {
"confirmStartTeam": "Mit diesen Pokémon losziehen?", "confirmStartTeam": "Mit diesen Pokémon losziehen?",
"confirmExit": "Do you want to exit?",
"invalidParty": "Das ist kein gültiges Team!", "invalidParty": "Das ist kein gültiges Team!",
"gen1": "I", "gen1": "I",
"gen2": "II", "gen2": "II",

View File

@ -33,7 +33,7 @@ export const statusEffect: StatusEffectTranslationEntries = {
description: "Paralyse", description: "Paralyse",
obtain: "{{pokemonNameWithAffix}} wurde paralysiert!\nEs kann eventuell nicht handeln!", obtain: "{{pokemonNameWithAffix}} wurde paralysiert!\nEs kann eventuell nicht handeln!",
obtainSource: "{{pokemonNameWithAffix}} wurde durch {{sourceText}} paralysiert,\nEs kann eventuell nicht handeln!", obtainSource: "{{pokemonNameWithAffix}} wurde durch {{sourceText}} paralysiert,\nEs kann eventuell nicht handeln!",
activation: "{{pokemonNameWithAffix}}ist paralysiert!\nEs kann nicht angreifen!", activation: "{{pokemonNameWithAffix}} ist paralysiert!\nEs kann nicht angreifen!",
overlap: "{{pokemonNameWithAffix}} ist bereits paralysiert!", overlap: "{{pokemonNameWithAffix}} ist bereits paralysiert!",
heal: "Die Paralyse von {{pokemonNameWithAffix}} wurde aufgehoben!" heal: "Die Paralyse von {{pokemonNameWithAffix}} wurde aufgehoben!"
}, },

View File

@ -128,21 +128,32 @@ export const trainerClasses: SimpleTranslationEntries = {
"rocket_grunt": "Rüpel von Team Rocket", "rocket_grunt": "Rüpel von Team Rocket",
"rocket_grunt_female": "Rüpel von Team Rocket", "rocket_grunt_female": "Rüpel von Team Rocket",
"rocket_grunts": "Rüpel von Team Rocket", "rocket_grunts": "Rüpel von Team Rocket",
"rocket_admin": "Team Rocket Vorstand",
"rocket_admin_female": "Team Rocket Vorstand",
"magma_grunt": "Rüpel von Team Magma", "magma_grunt": "Rüpel von Team Magma",
"magma_grunt_female": "Rüpel von Team Magma", "magma_grunt_female": "Rüpel von Team Magma",
"magma_grunts": "Rüpel von Team Magma", "magma_grunts": "Rüpel von Team Magma",
"magma_admin": "Team Magma Vorstand",
"magma_admin_female": "Team Magma Vorstand",
"aqua_grunt": "Rüpel von Team Aqua", "aqua_grunt": "Rüpel von Team Aqua",
"aqua_grunt_female": "Rüpel von Team Aqua", "aqua_grunt_female": "Rüpel von Team Aqua",
"aqua_grunts": "Rüpel von Team Aqua", "aqua_grunts": "Rüpel von Team Aqua",
"aqua_admin": "Team Aqua Vorstand",
"aqua_admin_female": "Team Aqua Vorstand",
"galactic_grunt": "Rüpel von Team Galaktik", "galactic_grunt": "Rüpel von Team Galaktik",
"galactic_grunt_female": "Rüpel von Team Galaktik", "galactic_grunt_female": "Rüpel von Team Galaktik",
"galactic_grunts": "Rüpel von Team Galaktik", "galactic_grunts": "Rüpel von Team Galaktik",
"galactic_admin": "Team Galaktik Commander",
"galactic_admin_female": "Team Galaktik Commander",
"plasma_grunt": "Rüpel von Team Plasma", "plasma_grunt": "Rüpel von Team Plasma",
"plasma_grunt_female": "Rüpel von Team Plasma", "plasma_grunt_female": "Rüpel von Team Plasma",
"plasma_grunts": "Rüpel von Team Plasma", "plasma_grunts": "Rüpel von Team Plasma",
"plasma_sage": "Weiser von Team Plasma",
"flare_grunt": "Rüpel von Team Flare", "flare_grunt": "Rüpel von Team Flare",
"flare_grunt_female": "Rüpel von Team Flare", "flare_grunt_female": "Rüpel von Team Flare",
"flare_grunts": "Rüpel von Team Flare", "flare_grunts": "Rüpel von Team Flare",
"flare_admin": "Team Flare Vorstand",
"flare_admin_female": "Team Flare Vorstand",
} as const; } as const;
// Names of special trainers like gym leaders, elite four, and the champion // Names of special trainers like gym leaders, elite four, and the champion

View File

@ -5,7 +5,8 @@ export const bgmName: SimpleTranslationEntries = {
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "B2W2 Kanto Champion Battle", "battle_kanto_champion": "B2W2 Kanto Champion Battle",
"battle_johto_champion": "B2W2 Johto Champion Battle", "battle_johto_champion": "B2W2 Johto Champion Battle",
"battle_hoenn_champion": "B2W2 Hoenn Champion Battle", "battle_hoenn_champion_g5": "B2W2 Hoenn Champion Battle",
"battle_hoenn_champion_g6": "ORAS Hoenn Champion Battle",
"battle_sinnoh_champion": "B2W2 Sinnoh Champion Battle", "battle_sinnoh_champion": "B2W2 Sinnoh Champion Battle",
"battle_champion_alder": "BW Unova Champion Battle", "battle_champion_alder": "BW Unova Champion Battle",
"battle_champion_iris": "B2W2 Unova Champion Battle", "battle_champion_iris": "B2W2 Unova Champion Battle",

View File

@ -391,6 +391,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "Team Rocket blasting off again!" 1: "Team Rocket blasting off again!"
}, },
}, },
"rocket_admin": {
"encounter": {
1: "Oh? You managed to get this far? You must be quite the trainer.",
2: "That's quite enough of you playing hero, kid.",
3: "I'll show you how scary an angry adult can be!"
},
"victory": {
1: "No! Forgive me Giovanni!",
2: "How could this be?",
3: "Urgh... You were too strong..."
},
},
"magma_grunt": { "magma_grunt": {
"encounter": { "encounter": {
1: " If you get in the way of Team Magma, dont expect any mercy!" 1: " If you get in the way of Team Magma, dont expect any mercy!"
@ -399,6 +411,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "Huh? I lost?!" 1: "Huh? I lost?!"
}, },
}, },
"magma_admin": {
"encounter": {
1: "Hehehe! So you've come all the way here! But you're too late!",
2: "You're going to meddle in Team Magma's affairs? You're so cute you're disgusting! I'll put you down kiddy!",
3: "I'm going to give you a little taste of pain! Resign yourself to it!"
},
"victory": {
1: "Hehehe... So I lost...",
2: "You're disgustingly strong!",
3: "Ahahaha! Ouch!"
},
},
"aqua_grunt": { "aqua_grunt": {
"encounter": { "encounter": {
1: "No one who crosses Team Aqua gets any mercy, not even kids!" 1: "No one who crosses Team Aqua gets any mercy, not even kids!"
@ -407,6 +431,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "You're kidding me!" 1: "You're kidding me!"
}, },
}, },
"aqua_admin": {
"encounter": {
1: "I'm a cut above the grunts you've seen so far. I'm going to puvlerize you!",
2: "Hahn? What's this? Who's this spoiled brat?",
3: "What are you doing here? Did you follow us?"
},
"victory": {
1: "So I lost too...",
2: "Ahhh?! Did I go too easy on you?!",
3: "Wh-what was that?"
},
},
"galactic_grunt": { "galactic_grunt": {
"encounter": { "encounter": {
1: "Don't mess with Team Galactic!" 1: "Don't mess with Team Galactic!"
@ -415,6 +451,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "Shut down..." 1: "Shut down..."
}, },
}, },
"galactic_admin": {
"encounter": {
1: "I'm one of Team Galactic's Commanders.",
2: "Anything that opposes Team Galactic must be crushed! Even the very thought of opposition will not be tolerated!",
3: "What's the matter? Don't tell me you're shaking?"
},
"victory": {
1: "This can't be?! I lost?! You... you uppity brat!",
2: "You, my friend, are tough!",
3: "Losing to some child... Being careless cost me too much."
},
},
"plasma_grunt": { "plasma_grunt": {
"encounter": { "encounter": {
1: "We won't tolerate people who have different ideas!" 1: "We won't tolerate people who have different ideas!"
@ -423,6 +471,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "Plasmaaaaaaaaa!" 1: "Plasmaaaaaaaaa!"
}, },
}, },
"plasma_sage": {
"encounter": {
1: "You could become a threat to Team Plasma, so we will eliminate you here!",
2: "Oh, for crying out loud... I didn't expect to have to fight!",
3: "You're an impressive Trainer to have made it this far."
},
"victory": {
1: "Ghetsis...",
2: "It's bitter cold. I'm shivering. I'm suffering.",
3: "Hmph. You're a smarter Trainer than I expected."
},
},
"flare_grunt": { "flare_grunt": {
"encounter": { "encounter": {
1: "Fashion is most important to us!" 1: "Fashion is most important to us!"
@ -431,6 +491,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
1: "The future doesn't look bright for me." 1: "The future doesn't look bright for me."
}, },
}, },
"flare_admin": {
"encounter": {
1: "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!",
2: "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.",
3: "I've been waiting for you! I need to do a little research on you! Come, let us begin!"
},
"victory": {
1: "You're quite strong. Oh yes-very strong, indeed.",
2: "Ding-ding-ding! Yup, you did it! To the victor goes the spoils!",
3: "Wonderful! Amazing! You have tremendous skill and bravery!"
},
},
"rocket_boss_giovanni_1": { "rocket_boss_giovanni_1": {
"encounter": { "encounter": {
1: "So! I must say, I am impressed you got here!" 1: "So! I must say, I am impressed you got here!"

View File

@ -3,16 +3,28 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const filterBar: SimpleTranslationEntries = { export const filterBar: SimpleTranslationEntries = {
"genFilter": "Gen", "genFilter": "Gen",
"typeFilter": "Type", "typeFilter": "Type",
"caughtFilter": "Caught",
"unlocksFilter": "Unlocks", "unlocksFilter": "Unlocks",
"winFilter": "Win", "miscFilter": "Misc",
"sortFilter": "Sort", "sortFilter": "Sort",
"all": "All", "all": "All",
"normal": "Normal", "normal": "Normal",
"uncaught": "Uncaught", "uncaught": "Uncaught",
"passive": "Passive",
"passiveUnlocked": "Passive Unlocked", "passiveUnlocked": "Passive Unlocked",
"passiveLocked": "Passive Locked", "passiveLocked": "Passive Locked",
"hasWon": "Yes", "costReduction": "Cost Reduction",
"hasNotWon": "No", "costReductionUnlocked": "Cost Reduction Unlocked",
"costReductionLocked": "Cost Reduction Locked",
"ribbon": "Ribbon",
"hasWon": "Ribbon - Yes",
"hasNotWon": "Ribbon - No",
"hiddenAbility": "Hidden Ability",
"hasHiddenAbility": "Hidden Ability - Yes",
"noHiddenAbility": "Hidden Ability - No",
"pokerus": "Pokerus",
"hasPokerus": "Pokerus - Yes",
"noPokerus": "Pokerus - No",
"sortByNumber": "No.", "sortByNumber": "No.",
"sortByCost": "Cost", "sortByCost": "Cost",
"sortByCandies": "Candy Count", "sortByCandies": "Candy Count",

View File

@ -50,5 +50,13 @@ export const moveTriggers: SimpleTranslationEntries = {
"transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!", "transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!", "tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!",
"addType": "{{typeName}} was added to\n{{pokemonName}}!", "addType": "{{typeName}} was added to\n{{pokemonName}}!",
"cannotUseMove": "{{pokemonName}} cannot use {{moveName}}!" "cannotUseMove": "{{pokemonName}} cannot use {{moveName}}!",
"healHp": "{{pokemonName}} had its HP restored.",
"sacrificialFullRestore": "{{pokemonName}}'s Healing Wish\nwas granted!",
"invertStats": "{{pokemonName}}'s stat changes\nwere all reversed!",
"resetStats": "{{pokemonName}}'s stat changes\nwere eliminated!",
"faintCountdown": "{{pokemonName}}\nwill faint in {{turnCount}} turns.",
"copyType": "{{pokemonName}}'s type became the same as\n{{targetPokemonName}}'s type!",
"suppressAbilities": "{{pokemonName}}'s ability\nwas suppressed!",
"swapArenaTags": "{{pokemonName}} swapped the battle effects affecting each side of the field!",
} as const; } as const;

View File

@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
*/ */
export const starterSelectUiHandler: SimpleTranslationEntries = { export const starterSelectUiHandler: SimpleTranslationEntries = {
"confirmStartTeam": "Begin with these Pokémon?", "confirmStartTeam": "Begin with these Pokémon?",
"confirmExit": "Do you want to exit?",
"invalidParty": "This is not a valid starting party!", "invalidParty": "This is not a valid starting party!",
"gen1": "I", "gen1": "I",
"gen2": "II", "gen2": "II",

View File

@ -126,17 +126,34 @@ export const trainerClasses: SimpleTranslationEntries = {
"workers": "Workers", "workers": "Workers",
"youngster": "Youngster", "youngster": "Youngster",
"rocket_grunt": "Rocket Grunt", "rocket_grunt": "Rocket Grunt",
"rocket_grunts": "Rocket Grunts",
"rocket_grunt_female": "Rocket Grunt", "rocket_grunt_female": "Rocket Grunt",
"rocket_admin": "Rocket Admin",
"rocket_admin_female": "Rocket Admin",
"magma_grunt": "Magma Grunt", "magma_grunt": "Magma Grunt",
"magma_grunt_female": "Magma Grunt", "magma_grunt_female": "Magma Grunt",
"magma_grunts": "Magma Grunts",
"magma_admin": "Magma Admin",
"magma_admin_female": "Magma Admin",
"aqua_grunt": "Aqua Grunt", "aqua_grunt": "Aqua Grunt",
"aqua_grunt_female": "Aqua Grunt", "aqua_grunt_female": "Aqua Grunt",
"aqua_grunts": "Aqua Grunts",
"aqua_admin": "Aqua Admin",
"aqua_admin_female": "Aqua Admin",
"galactic_grunt": "Galactic Grunt", "galactic_grunt": "Galactic Grunt",
"galactic_grunt_female": "Galactic Grunt", "galactic_grunt_female": "Galactic Grunt",
"galactic_grunts": "Galactic Grunts",
"galactic_admin": "Galactic Admin",
"galactic_admin_female": "Galactic Admin",
"plasma_grunt": "Plasma Grunt", "plasma_grunt": "Plasma Grunt",
"plasma_grunt_female": "Plasma Grunt", "plasma_grunt_female": "Plasma Grunt",
"plasma_grunts": "Plasma Grunts",
"plasma_sage": "Plasma Sage",
"flare_grunt": "Flare Grunt", "flare_grunt": "Flare Grunt",
"flare_grunt_female": "Flare Grunt", "flare_grunt_female": "Flare Grunt",
"flare_grunts": "Flare Grunts",
"flare_admin": "Flare Admin",
"flare_admin_female": "Flare Admin",
} as const; } as const;
// Names of special trainers like gym leaders, elite four, and the champion // Names of special trainers like gym leaders, elite four, and the champion

View File

@ -5,7 +5,8 @@ export const bgmName: SimpleTranslationEntries = {
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "B2W2 - ¡Vs Campeón de Kanto!", "battle_kanto_champion": "B2W2 - ¡Vs Campeón de Kanto!",
"battle_johto_champion": "B2W2 - ¡Vs Campeón de Johto!", "battle_johto_champion": "B2W2 - ¡Vs Campeón de Johto!",
"battle_hoenn_champion": "B2W2 - ¡Vs Campeón de Hoenn!", "battle_hoenn_champion_g5": "B2W2 - ¡Vs Campeón de Hoenn!",
"battle_hoenn_champion_g6": "ORAS - ¡Vs Campeón de Hoenn!",
"battle_sinnoh_champion": "B2W2 - ¡Vs Campeón de Sinnoh!", "battle_sinnoh_champion": "B2W2 - ¡Vs Campeón de Sinnoh!",
"battle_champion_alder": "BW - ¡Vs Campeón de Teselia!", "battle_champion_alder": "BW - ¡Vs Campeón de Teselia!",
"battle_champion_iris": "B2W2 - ¡Vs Campeón de Teselia!", "battle_champion_iris": "B2W2 - ¡Vs Campeón de Teselia!",

View File

@ -3,16 +3,28 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const filterBar: SimpleTranslationEntries = { export const filterBar: SimpleTranslationEntries = {
"genFilter": "Gen.", "genFilter": "Gen.",
"typeFilter": "Tipo", "typeFilter": "Tipo",
"caughtFilter": "Caught",
"unlocksFilter": "Otros", "unlocksFilter": "Otros",
"winFilter": "Vic.", "miscFilter": "Misc",
"sortFilter": "Orden", "sortFilter": "Orden",
"all": "Todo", "all": "Todo",
"normal": "Normal", "normal": "Normal",
"uncaught": "No Capt.", "uncaught": "No Capt.",
"passive": "Passive",
"passiveUnlocked": "Pasiva Desbloq.", "passiveUnlocked": "Pasiva Desbloq.",
"passiveLocked": "Pasiva Bloq.", "passiveLocked": "Pasiva Bloq.",
"costReduction": "Cost Reduction",
"costReductionUnlocked": "Cost Reduction Unlocked",
"costReductionLocked": "Cost Reduction Locked",
"ribbon": "Ribbon",
"hasWon": "Ya ha ganado", "hasWon": "Ya ha ganado",
"hasNotWon": "Aún no ha ganado", "hasNotWon": "Aún no ha ganado",
"hiddenAbility": "Hidden Ability",
"hasHiddenAbility": "Hidden Ability - Yes",
"noHiddenAbility": "Hidden Ability - No",
"pokerus": "Pokerus",
"hasPokerus": "Pokerus - Yes",
"noPokerus": "Pokerus - No",
"sortByNumber": "Núm.", "sortByNumber": "Núm.",
"sortByCost": "Coste", "sortByCost": "Coste",
"sortByCandies": "# Caramelos", "sortByCandies": "# Caramelos",

View File

@ -50,5 +50,13 @@ export const moveTriggers: SimpleTranslationEntries = {
"transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!", "transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!", "tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!",
"addType": "{{typeName}} was added to\n{{pokemonName}}!", "addType": "{{typeName}} was added to\n{{pokemonName}}!",
"cannotUseMove": "{{pokemonName}} cannot use {{moveName}}!" "cannotUseMove": "{{pokemonName}} cannot use {{moveName}}!",
"healHp": "{{pokemonName}} had its HP restored.",
"sacrificialFullRestore": "{{pokemonName}}'s Healing Wish\nwas granted!",
"invertStats": "{{pokemonName}}'s stat changes\nwere all reversed!",
"resetStats": "{{pokemonName}}'s stat changes\nwere eliminated!",
"faintCountdown": "{{pokemonName}}\nwill faint in {{turnCount}} turns.",
"copyType": "{{pokemonName}}'s type\nchanged to match {{targetPokemonName}}'s!",
"suppressAbilities": "{{pokemonName}}'s ability\nwas suppressed!",
"swapArenaTags": "{{pokemonName}} swapped the battle effects affecting each side of the field!",
} as const; } as const;

View File

@ -7,6 +7,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
*/ */
export const starterSelectUiHandler: SimpleTranslationEntries = { export const starterSelectUiHandler: SimpleTranslationEntries = {
"confirmStartTeam": "¿Comenzar con estos Pokémon?", "confirmStartTeam": "¿Comenzar con estos Pokémon?",
"confirmExit": "Do you want to exit?",
"invalidParty": "¡Este equipo no es válido!", "invalidParty": "¡Este equipo no es válido!",
"gen1": "I", "gen1": "I",
"gen2": "II", "gen2": "II",

View File

@ -117,7 +117,35 @@ export const trainerClasses: SimpleTranslationEntries = {
"worker": "Operario", "worker": "Operario",
"worker_female": "Operaria", "worker_female": "Operaria",
"workers": "Operarios", "workers": "Operarios",
"youngster": "Joven" "youngster": "Joven",
"rocket_grunt": "Rocket Grunt",
"rocket_grunts": "Rocket Grunts",
"rocket_grunt_female": "Rocket Grunt",
"rocket_admin": "Rocket Admin",
"rocket_admin_female": "Rocket Admin",
"magma_grunt": "Magma Grunt",
"magma_grunt_female": "Magma Grunt",
"magma_grunts": "Magma Grunts",
"magma_admin": "Magma Admin",
"magma_admin_female": "Magma Admin",
"aqua_grunt": "Aqua Grunt",
"aqua_grunt_female": "Aqua Grunt",
"aqua_grunts": "Aqua Grunts",
"aqua_admin": "Aqua Admin",
"aqua_admin_female": "Aqua Admin",
"galactic_grunt": "Galactic Grunt",
"galactic_grunt_female": "Galactic Grunt",
"galactic_grunts": "Galactic Grunts",
"galactic_admin": "Galactic Admin",
"galactic_admin_female": "Galactic Admin",
"plasma_grunt": "Plasma Grunt",
"plasma_grunt_female": "Plasma Grunt",
"plasma_grunts": "Plasma Grunts",
"flare_grunt": "Flare Grunt",
"flare_grunt_female": "Flare Grunt",
"flare_grunts": "Flare Grunts",
"flare_admin": "Flare Admin",
"flare_admin_female": "Flare Admin",
} as const; } as const;
// Names of special trainers like gym leaders, elite four, and the champion // Names of special trainers like gym leaders, elite four, and the champion

View File

@ -264,6 +264,10 @@ export const PGMachv: AchievementTranslationEntries = {
"MONO_FAIRY": { "MONO_FAIRY": {
name: "Hey ! Listen !", name: "Hey ! Listen !",
}, },
"FRESH_START": {
name: "Du premier coup !",
description: "Terminer un challenge « Nouveau départ »."
}
} as const; } as const;
// Achievement translations for the when the player character is female (it for now uses the same translations as the male version) // Achievement translations for the when the player character is female (it for now uses the same translations as the male version)
@ -530,4 +534,8 @@ export const PGFachv: AchievementTranslationEntries = {
"MONO_FAIRY": { "MONO_FAIRY": {
name: "Hey ! Listen !", name: "Hey ! Listen !",
}, },
"FRESH_START": {
name: "Du premier coup !",
description: "Terminer un challenge « Nouveau départ »."
}
} as const; } as const;

View File

@ -5,7 +5,8 @@ export const bgmName: SimpleTranslationEntries = {
"missing_entries" : "{{name}}", "missing_entries" : "{{name}}",
"battle_kanto_champion": "N2B2 - Vs. Maitre de Kanto", "battle_kanto_champion": "N2B2 - Vs. Maitre de Kanto",
"battle_johto_champion": "N2B2 - Vs. Maitre de Johto", "battle_johto_champion": "N2B2 - Vs. Maitre de Johto",
"battle_hoenn_champion": "N2B2 - Vs. Maitre de Hoenn", "battle_hoenn_champion_g5": "N2B2 - Vs. Maitre de Hoenn",
"battle_hoenn_champion_g6": "ROSA - Vs. Maitre de Hoenn",
"battle_sinnoh_champion": "N2B2 - Vs. Maitresse de Sinnoh", "battle_sinnoh_champion": "N2B2 - Vs. Maitresse de Sinnoh",
"battle_champion_alder": "NB - Vs. Maitre dUnys", "battle_champion_alder": "NB - Vs. Maitre dUnys",
"battle_champion_iris": "N2B2 - Vs. Maitresse dUnys", "battle_champion_iris": "N2B2 - Vs. Maitresse dUnys",
@ -74,16 +75,16 @@ export const bgmName: SimpleTranslationEntries = {
"battle_wild": "NB - Vs. Pokémon sauvage", "battle_wild": "NB - Vs. Pokémon sauvage",
"battle_wild_strong": "NB - Vs. Pokémon puissant sauvage", "battle_wild_strong": "NB - Vs. Pokémon puissant sauvage",
"end_summit": "PDM ÉSDX - Tour Céleste", "end_summit": "PDM ÉSDX - Tour Céleste",
"battle_rocket_grunt": "HGSS Team Rocket Battle", "battle_rocket_grunt": "HGSS Vs. Team Rocket",
"battle_aqua_magma_grunt": "ORAS Team Aqua & Magma Battle", "battle_aqua_magma_grunt": "ROSA Vs. Team Aqua/Magma",
"battle_galactic_grunt": "BDSP Team Galactic Battle", "battle_galactic_grunt": "DÉPS Vs. Team Galaxie",
"battle_plasma_grunt": "NB - Vs. Team Plasma", "battle_plasma_grunt": "NB - Vs. Team Plasma",
"battle_flare_grunt": "XY Team Flare Battle", "battle_flare_grunt": "XY - Vs. Team Flare",
"battle_rocket_boss": "USUM Giovanni Battle", "battle_rocket_boss": "USUL - Vs. Giovanni",
"battle_aqua_magma_boss": "ORAS Archie & Maxie Battle", "battle_aqua_magma_boss": "ROSA - Vs. Max/Arthur",
"battle_galactic_boss": "BDSP Cyrus Battle", "battle_galactic_boss": "DÉPS - Vs. Hélio",
"battle_plasma_boss": "B2W2 Ghetsis Battle", "battle_plasma_boss": "N2B2 - Vs. Ghetis",
"battle_flare_boss": "XY Lysandre Battle", "battle_flare_boss": "XY - Vs. Lysandre",
// Biome Music // Biome Music
"abyss": "PDM EdS - Cratère Obscur", "abyss": "PDM EdS - Cratère Obscur",

View File

@ -2,7 +2,7 @@ import { TranslationEntries } from "#app/interfaces/locales";
export const challenges: TranslationEntries = { export const challenges: TranslationEntries = {
"title": "Paramètres du Challenge", "title": "Paramètres du Challenge",
"illegalEvolution": "{{pokemon}} sest transformé en Pokémon\ninéligible pour ce challenge !", "illegalEvolution": "{{pokemon}} est devenu\ninéligible pour ce challenge !",
"singleGeneration": { "singleGeneration": {
"name": "Mono-génération", "name": "Mono-génération",
"desc": "Vous ne pouvez choisir que des Pokémon de {{gen}} génération.", "desc": "Vous ne pouvez choisir que des Pokémon de {{gen}} génération.",
@ -23,4 +23,10 @@ export const challenges: TranslationEntries = {
"desc_default": "Vous ne pouvez choisir que des Pokémon du type sélectionné." "desc_default": "Vous ne pouvez choisir que des Pokémon du type sélectionné."
//type in pokemon-info //type in pokemon-info
}, },
"freshStart": {
"name": "Nouveau départ",
"desc": "Vous ne pouvez choisir que les starters de base du jeu, comme si vous le recommenciez.",
"value.0": "Non",
"value.1": "Oui",
}
} as const; } as const;

View File

@ -2898,6 +2898,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
1: "Une fois de plus la Team Rocket senvole vers dautres cieux !" 1: "Une fois de plus la Team Rocket senvole vers dautres cieux !"
}, },
}, },
"rocket_admin": {
"encounter": {
1: "Oh? You managed to get this far? You must be quite the trainer.",
2: "That's quite enough of you playing hero, kid.",
3: "I'll show you how scary an angry adult can be!"
},
"victory": {
1: "No! Forgive me Giovanni!",
2: "How could this be?",
3: "Urgh... You were too strong..."
},
},
"magma_grunt": { "magma_grunt": {
"encounter": { "encounter": {
1: "Nespère pas recevoir de la pitié si tu te mets sur le chemin de la Team Magma !" 1: "Nespère pas recevoir de la pitié si tu te mets sur le chemin de la Team Magma !"
@ -2906,6 +2918,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
1: "Je…?\nJai perdu ?!" 1: "Je…?\nJai perdu ?!"
}, },
}, },
"magma_admin": {
"encounter": {
1: "Hehehe! So you've come all the way here! But you're too late!",
2: "You're going to meddle in Team Magma's affairs? You're so cute you're disgusting! I'll put you down kiddy!",
3: "I'm going to give you a little taste of pain! Resign yourself to it!"
},
"victory": {
1: "Hehehe... So I lost...",
2: "You're disgustingly strong!",
3: "Ahahaha! Ouch!"
},
},
"aqua_grunt": { "aqua_grunt": {
"encounter": { "encounter": {
1: "Aucune pitié si tu te mets sur le chemin de la Team Aqua, même pour une gamine !" 1: "Aucune pitié si tu te mets sur le chemin de la Team Aqua, même pour une gamine !"
@ -2914,6 +2938,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
1: "Comment ça ?" 1: "Comment ça ?"
}, },
}, },
"aqua_admin": {
"encounter": {
1: "I'm a cut above the grunts you've seen so far. I'm going to puvlerize you!",
2: "Hahn? What's this? Who's this spoiled brat?",
3: "What are you doing here? Did you follow us?"
},
"victory": {
1: "So I lost too...",
2: "Ahhh?! Did I go too easy on you?!",
3: "Wh-what was that?"
},
},
"galactic_grunt": { "galactic_grunt": {
"encounter": { "encounter": {
1: "Ne te mets pas en travers de la Team Galaxie !" 1: "Ne te mets pas en travers de la Team Galaxie !"
@ -2922,6 +2958,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
1: "Désactivation…" 1: "Désactivation…"
}, },
}, },
"galactic_admin": {
"encounter": {
1: "I'm one of Team Galactic's Commanders.",
2: "Anything that opposes Team Galactic must be crushed! Even the very thought of opposition will not be tolerated!",
3: "What's the matter? Don't tell me you're shaking?"
},
"victory": {
1: "This can't be?! I lost?! You... you uppity brat!",
2: "You, my friend, are tough!",
3: "Losing to some child... Being careless cost me too much."
},
},
"plasma_grunt": { "plasma_grunt": {
"encounter": { "encounter": {
1: "Pas de quatiers à ceux qui ne suivent pas notre idéal !" 1: "Pas de quatiers à ceux qui ne suivent pas notre idéal !"
@ -2930,6 +2978,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
1: "Plasmaaaaaaaaa !" 1: "Plasmaaaaaaaaa !"
}, },
}, },
"plasma_sage": {
"encounter": {
1: "You could become a threat to Team Plasma, so we will eliminate you here!",
2: "Oh, for crying out loud... I didn't expect to have to fight!",
3: "You're an impressive Trainer to have made it this far."
},
"victory": {
1: "Ghetsis...",
2: "It's bitter cold. I'm shivering. I'm suffering.",
3: "Hmph. You're a smarter Trainer than I expected."
},
},
"flare_grunt": { "flare_grunt": {
"encounter": { "encounter": {
1: "Le style et le bon gout, il ny a que ça qui compte !" 1: "Le style et le bon gout, il ny a que ça qui compte !"
@ -2938,6 +2998,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
1: "Mon futur me semble guère radieux." 1: "Mon futur me semble guère radieux."
}, },
}, },
"flare_admin": {
"encounter": {
1: "Ah ha ha! It would be my pleasure. Come on, little Trainer! Let's see what you've got!",
2: "Hmm... You're more powerful than you look. I wonder how much energy there is inside you.",
3: "I've been waiting for you! I need to do a little research on you! Come, let us begin!"
},
"victory": {
1: "You're quite strong. Oh yes-very strong, indeed.",
2: "Ding-ding-ding! Yup, you did it! To the victor goes the spoils!",
3: "Wonderful! Amazing! You have tremendous skill and bravery!"
},
},
"rocket_boss_giovanni_1": { "rocket_boss_giovanni_1": {
"encounter": { "encounter": {
1: "Bien. Je dois admettre que je suis impressionné de te voir ici !" 1: "Bien. Je dois admettre que je suis impressionné de te voir ici !"

Some files were not shown because too many files have changed in this diff Show More