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?
<!-- 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 -->
<!-- Does it come from an issue or another PR? Please link it -->
<!-- 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 -->
<!-- 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?
- [ ] Have I provided a clear explanation of the changes?
- [ ] 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)?
- [ ] Are all unit tests still passing? (`npm run test`)
- [ ] Are the changes visual?

Binary file not shown.

View File

@ -3,270 +3,138 @@
{
"image": "1001.png",
"format": "RGBA8888",
"size": {
"w": 237,
"h": 237
},
"size": { "w": 161, "h": 157 },
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 79,
"h": 79
},
"frame": {
"x": 0,
"y": 0,
"w": 79,
"h": 79
}
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 79,
"h": 78
},
"frame": {
"x": 79,
"y": 0,
"w": 79,
"h": 78
}
},
{
"filename": "0012.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 79,
"h": 78
},
"frame": {
"x": 79,
"y": 0,
"w": 79,
"h": 78
}
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 3,
"w": 79,
"h": 76
},
"frame": {
"x": 158,
"y": 0,
"w": 79,
"h": 76
}
},
{
"filename": "0011.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 3,
"w": 79,
"h": 76
},
"frame": {
"x": 158,
"y": 0,
"w": 79,
"h": 76
}
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
},
{
"filename": "0004.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": "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
}
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
},
{
"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
}
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
},
{
"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
}
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
},
"spriteSourceSize": {
"x": 0,
"y": 7,
"w": 79,
"h": 72
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
},
"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$"
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
"frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"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,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
"frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
},
{
"filename": "0012.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
"frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
},
{
"filename": "0013.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
},
{
"filename": "0014.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
},
{
"filename": "0015.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
},
{
"filename": "0016.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
}
]}],
"meta": {"app": "https://www.aseprite.org/","version": "1.3.7-x64"
}
}

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

@ -3,270 +3,138 @@
{
"image": "1001.png",
"format": "RGBA8888",
"size": {
"w": 237,
"h": 237
},
"size": { "w": 161, "h": 157 },
"scale": 1,
"frames": [
{
"filename": "0001.png",
"rotated": false,
"trimmed": false,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 0,
"w": 79,
"h": 79
},
"frame": {
"x": 0,
"y": 0,
"w": 79,
"h": 79
}
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
},
{
"filename": "0002.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 79,
"h": 78
},
"frame": {
"x": 79,
"y": 0,
"w": 79,
"h": 78
}
},
{
"filename": "0012.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 1,
"w": 79,
"h": 78
},
"frame": {
"x": 79,
"y": 0,
"w": 79,
"h": 78
}
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
},
{
"filename": "0003.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 3,
"w": 79,
"h": 76
},
"frame": {
"x": 158,
"y": 0,
"w": 79,
"h": 76
}
},
{
"filename": "0011.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
},
"spriteSourceSize": {
"x": 0,
"y": 3,
"w": 79,
"h": 76
},
"frame": {
"x": 158,
"y": 0,
"w": 79,
"h": 76
}
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
},
{
"filename": "0004.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": "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
}
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 },
"frame": { "x": 80, "y": 78, "w": 79, "h": 79 }
},
{
"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
}
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
},
{
"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
}
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
},
{
"filename": "0007.png",
"rotated": false,
"trimmed": true,
"sourceSize": {
"w": 79,
"h": 79
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
},
"spriteSourceSize": {
"x": 0,
"y": 7,
"w": 79,
"h": 72
{
"filename": "0008.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 80, "h": 78 },
"frame": { "x": 0, "y": 79, "w": 80, "h": 78 }
},
"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$"
{
"filename": "0009.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
"frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
},
{
"filename": "0010.png",
"rotated": false,
"trimmed": true,
"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,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
"frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
},
{
"filename": "0012.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 },
"frame": { "x": 80, "y": 0, "w": 81, "h": 78 }
},
{
"filename": "0013.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
},
{
"filename": "0014.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
},
{
"filename": "0015.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
},
{
"filename": "0016.png",
"rotated": false,
"trimmed": true,
"sourceSize": { "w": 81, "h": 79 },
"spriteSourceSize": { "x": 0, "y": 0, "w": 80, "h": 79 },
"frame": { "x": 0, "y": 0, "w": 80, "h": 79 }
}
]}],
"meta": {"app": "https://www.aseprite.org/","version": "1.3.7-x64"
}
}

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;
case "battle_johto_champion": //B2W2 Johto Champion Battle
return 23.498;
case "battle_hoenn_champion": //B2W2 Hoenn Champion Battle
case "battle_hoenn_champion_g5": //B2W2 Hoenn Champion Battle
return 11.328;
case "battle_hoenn_champion_g6": //ORAS Hoenn Champion Battle
return 11.762;
case "battle_sinnoh_champion": //B2W2 Sinnoh Champion Battle
return 12.235;
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) => {
const rand = Utils.randSeedInt(trainerPool.length);
const trainerTypes: TrainerType[] = [];
@ -435,11 +441,20 @@ function getRandomTrainerFunc(trainerPool: (TrainerType | TrainerType[])[]): Get
: trainerPoolEntry;
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)
if (trainerConfigs[trainerTypes[rand]].trainerTypeDouble && (trainerTypes[rand] === TrainerType.TATE || trainerTypes[rand] === TrainerType.LIZA)) {
return new Trainer(scene, trainerTypes[rand], Utils.randSeedInt(3) ? TrainerVariant.DOUBLE : TrainerVariant.DEFAULT);
let trainerGender = TrainerVariant.DEFAULT;
if (randomGender) {
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
* 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
* E4 on 182, 184, 186, 188
* Champion on 190
@ -462,21 +478,21 @@ export const classicFixedBattles: FixedBattleConfigs = {
[25]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)
.setGetTrainerFunc(scene => new Trainer(scene, TrainerType.RIVAL_2, scene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT)),
[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)
.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)
.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)
.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)
.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)
.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)
.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)
.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)
.setGetTrainerFunc(getRandomTrainerFunc([ TrainerType.ROCKET_BOSS_GIOVANNI_1, TrainerType.MAXIE, TrainerType.ARCHIE, TrainerType.CYRUS, TrainerType.GHETSIS, TrainerType.LYSANDRE ])),
[145]: new FixedBattleConfig().setBattleType(BattleType.TRAINER)

View File

@ -941,14 +941,19 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr {
export class PostDefendWeatherChangeAbAttr extends PostDefendAbAttr {
private weatherType: WeatherType;
protected condition: PokemonDefendCondition | null;
constructor(weatherType: WeatherType) {
constructor(weatherType: WeatherType, condition?: PokemonDefendCondition) {
super();
this.weatherType = weatherType;
this.condition = condition ?? null;
}
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()) {
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)
.ignorable(),
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)
.attr(ReceivedMoveDamageMultiplierAbAttr, (target, user, move) => move.category === MoveCategory.SPECIAL, 0.5)
.ignorable(),

View File

@ -1747,7 +1747,7 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source
case BattlerTagType.RECEIVE_DOUBLE_DAMAGE:
return new BattlerTag(tagType, BattlerTagLapseType.PRE_MOVE, 1, sourceMove);
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:
return new GroundedTag(tagType, BattlerTagLapseType.CUSTOM, sourceMove);
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 {
/**
* 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 generations = [pokemon.generation];
const checkPokemonEvolutions = checkEvolutions ?? true as boolean;
if (soft) {
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]: [
{
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]: [
{
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]: [
{
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]: [
{
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]: [
{
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]: [
{
encounter: [

View File

@ -438,7 +438,7 @@ export const speciesEggMoves = {
[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.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.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 ],

View File

@ -2,7 +2,7 @@ import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./
import { BattleEndPhase, MoveEndPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases";
import { BattleStat, getBattleStatName } from "./battle-stat";
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 { StatusEffect, getStatusEffectHealText, isNonVolatileStatusEffect, getNonVolatileStatusEffects} from "./status-effect";
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 { allAbilities } from "./ability";
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 { TerrainType } from "./terrain";
import { SpeciesFormChangeActiveTrigger } from "./pokemon-forms";
import { ModifierPoolType } from "#app/modifier/modifier-type";
import { Command } from "../ui/command-ui-handler";
import i18next from "i18next";
@ -1388,7 +1387,7 @@ export class HealAttr extends MoveEffectAttr {
*/
addHealPhase(target: Pokemon, healRatio: number) {
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 {
@ -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);
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;
}
@ -1817,13 +1816,10 @@ export class MultiHitAttr extends MoveAttr {
}
case MultiHitType._2:
return 2;
break;
case MultiHitType._3:
return 3;
break;
case MultiHitType._10:
return 10;
break;
case MultiHitType.BEAT_UP:
const party = user.isPlayer() ? user.scene.getParty() : user.scene.getEnemyParty();
// 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 {
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);
this.cutRatio = cutRatio;
this.messageCallback = messageCallback;
}
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.updateInfo().then(() => {
const ret = super.apply(user, target, move, args);
if (this.messageCallback) {
this.messageCallback(user);
}
resolve(ret);
});
});
}
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();
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;
}
@ -2730,7 +2708,7 @@ export class ResetStatsAttr extends MoveEffectAttr {
target.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;
}
@ -4138,7 +4116,7 @@ export class DisableMoveAttr extends MoveEffectAttr {
target.summonData.disabledMove = disabledMove.moveId;
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;
}
@ -4445,7 +4423,7 @@ export class FaintCountdownAttr extends AddBattlerTagAttr {
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;
}
@ -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;
}
}
@ -4780,19 +4758,14 @@ export class ForceSwitchOutAttr extends MoveEffectAttr {
if (switchOutTarget.hp > 0) {
applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, switchOutTarget);
// 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 {
resolve(false);
}
return;
} else if (user.scene.currentBattle.battleType) {
// Switch out logic for the battle type
switchOutTarget.resetTurnData();
switchOutTarget.resetSummonData();
switchOutTarget.hideInfo();
switchOutTarget.setVisible(false);
switchOutTarget.scene.field.remove(switchOutTarget);
user.scene.triggerPokemonFormChange(switchOutTarget, SpeciesFormChangeActiveTrigger, true);
} else if (user.scene.currentBattle.battleType !== BattleType.WILD) {
// Switch out logic for trainer battles
switchOutTarget.leaveField(!this.batonPass);
if (switchOutTarget.hp > 0) {
// for opponent switching out
@ -4917,7 +4890,7 @@ export class CopyTypeAttr extends MoveEffectAttr {
user.summonData.types = target.getTypes(true);
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;
}
@ -5598,7 +5571,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr {
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;
}
@ -6486,7 +6459,9 @@ export function initMoves() {
new StatusMove(Moves.SWEET_KISS, Type.FAIRY, 75, 10, -1, 0, 2)
.attr(ConfuseAttr),
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)
.attr(StatusEffectAttr, StatusEffect.POISON)
.ballBombMove(),
@ -6670,6 +6645,7 @@ export function initMoves() {
.attr(StatChangeAttr, BattleStat.SPDEF, -1)
.ballBombMove(),
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}"})),
new AttackMove(Moves.ROCK_SMASH, Type.FIGHTING, MoveCategory.PHYSICAL, 40, 100, 15, 50, 0, 2)
.attr(StatChangeAttr, BattleStat.DEF, -1),
@ -6958,6 +6934,7 @@ export function initMoves() {
.attr(ConfuseAttr)
.pulseMove(),
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}"})),
new AttackMove(Moves.PSYCHO_BOOST, Type.PSYCHIC, MoveCategory.SPECIAL, 140, 90, 5, -1, 0, 3)
.attr(StatChangeAttr, BattleStat.SPATK, -2, true),
@ -7928,7 +7905,7 @@ export function initMoves() {
.makesContact(false)
.partial(),
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()
.target(MoveTarget.ALL_NEAR_ENEMIES),
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)
],
[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)
],
[Species.FIDOUGH]: [

View File

@ -17287,7 +17287,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = {
],
[Species.DIPPLIN]: [
[ EVOLVE_MOVE, Moves.DOUBLE_HIT ],
[ RELEARN_MOVE, Moves.INFESTATION ],
[ RELEARN_MOVE, Moves.DRAGON_CHEER ], // Custom
[ 1, Moves.WITHDRAW ],
[ 1, Moves.SWEET_SCENT ],
[ 1, Moves.RECYCLE ],
@ -18666,7 +18666,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 48, Moves.PIKA_PAPOW ],
],
3: [
[ EVOLVE_MOVE, Moves.METEOR_MASH ],
[ 1, Moves.METEOR_MASH ],
[ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ],
@ -18690,7 +18690,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 48, Moves.PIKA_PAPOW ],
],
4: [
[ EVOLVE_MOVE, Moves.ICICLE_CRASH ],
[ 1, Moves.ICICLE_CRASH ],
[ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ],
@ -18714,7 +18714,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 48, Moves.PIKA_PAPOW ],
],
5: [
[ EVOLVE_MOVE, Moves.DRAINING_KISS ],
[ 1, Moves.DRAINING_KISS ],
[ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ],
@ -18738,7 +18738,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 48, Moves.PIKA_PAPOW ],
],
6: [
[ EVOLVE_MOVE, Moves.ELECTRIC_TERRAIN ],
[ 1, Moves.ELECTRIC_TERRAIN ],
[ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ],
@ -18762,7 +18762,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 48, Moves.PIKA_PAPOW ],
],
7: [
[ EVOLVE_MOVE, Moves.FLYING_PRESS ],
[ 1, Moves.FLYING_PRESS ],
[ 1, Moves.TAIL_WHIP ],
[ 1, Moves.GROWL ],
[ 1, Moves.THUNDER_SHOCK ],
@ -18886,7 +18886,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
},
[Species.ROTOM]: {
1: [
[ EVOLVE_MOVE, Moves.OVERHEAT ],
[ 1, Moves.OVERHEAT ],
[ 1, Moves.DOUBLE_TEAM ],
[ 1, Moves.ASTONISH ],
[ 5, Moves.THUNDER_SHOCK ],
@ -18902,7 +18902,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 55, Moves.UPROAR ],
],
2: [
[ EVOLVE_MOVE, Moves.HYDRO_PUMP ],
[ 1, Moves.HYDRO_PUMP ],
[ 1, Moves.DOUBLE_TEAM ],
[ 1, Moves.ASTONISH ],
[ 5, Moves.THUNDER_SHOCK ],
@ -18918,7 +18918,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 55, Moves.UPROAR ],
],
3: [
[ EVOLVE_MOVE, Moves.BLIZZARD ],
[ 1, Moves.BLIZZARD ],
[ 1, Moves.DOUBLE_TEAM ],
[ 1, Moves.ASTONISH ],
[ 5, Moves.THUNDER_SHOCK ],
@ -18934,7 +18934,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 55, Moves.UPROAR ],
],
4: [
[ EVOLVE_MOVE, Moves.AIR_SLASH ],
[ 1, Moves.AIR_SLASH ],
[ 1, Moves.DOUBLE_TEAM ],
[ 1, Moves.ASTONISH ],
[ 5, Moves.THUNDER_SHOCK ],
@ -18950,7 +18950,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = {
[ 55, Moves.UPROAR ],
],
5: [
[ EVOLVE_MOVE, Moves.LEAF_STORM ],
[ 1, Moves.LEAF_STORM ],
[ 1, Moves.DOUBLE_TEAM ],
[ 1, Moves.ASTONISH ],
[ 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, "_");
this.name = i18next.t(`trainerNames:${nameForCall}`);
this.setTitle(title);
this.setMoneyMultiplier(2.25);
this.setMoneyMultiplier(2.5);
this.setBoss();
this.setStaticParty();
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.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))
.setSpeciesPools({
[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.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))
.setSpeciesPools({
[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.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))
.setSpeciesPools({
[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.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))
.setSpeciesPools({
[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.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))
.setSpeciesPools({
[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.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.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"),
@ -1368,7 +1404,7 @@ export const trainerConfigs: TrainerConfigs = {
p.generateAndPopulateMoveset();
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 => {
p.generateAndPopulateMoveset();
}))
@ -1377,7 +1413,7 @@ export const trainerConfigs: TrainerConfigs = {
p.generateAndPopulateMoveset();
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 => {
p.abilityIndex = 1; // Drizzle
p.generateAndPopulateMoveset();

View File

@ -53,11 +53,17 @@ export enum TrainerType {
WORKER,
YOUNGSTER,
ROCKET_GRUNT,
ROCKET_ADMIN,
MAGMA_GRUNT,
MAGMA_ADMIN,
AQUA_GRUNT,
AQUA_ADMIN,
GALACTIC_GRUNT,
GALACTIC_ADMIN,
PLASMA_GRUNT,
PLASMA_SAGE,
FLARE_GRUNT,
FLARE_ADMIN,
ROCKET_BOSS_GIOVANNI_1,
ROCKET_BOSS_GIOVANNI_2,
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 {
// 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.removeAllTags();
}

View File

@ -84,6 +84,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
public friendship: integer;
public metLevel: integer;
public metBiome: Biome | -1;
public metSpecies: Species;
public luck: integer;
public pauseEvolutions: boolean;
public pokerus: boolean;
@ -173,6 +174,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
this.metLevel = dataSource.metLevel || 5;
this.luck = dataSource.luck;
this.metBiome = dataSource.metBiome;
this.metSpecies = dataSource.metSpecies ?? (this.metBiome !== -1 ? this.species.speciesId : this.species.getRootSpeciesId(true));
this.pauseEvolutions = dataSource.pauseEvolutions;
this.pokerus = !!dataSource.pokerus;
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.metLevel = level;
this.metBiome = scene.currentBattle ? scene.arena.biomeType : -1;
this.metSpecies = species.speciesId;
this.pokerus = false;
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.
* @returns {Moves[]} The valid moves
* Checks which egg moves have been unlocked for the {@linkcode Pokemon} based
* 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[] {
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);
}
/**
* 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 {
this.battleInfo?.destroy();
super.destroy();
@ -3173,7 +3222,7 @@ export class PlayerPokemon extends Pokemon {
}
if (!dataSource) {
this.generateAndPopulateMoveset();
this.moveset = [];
}
this.generateCompatibleTms();
}
@ -3240,25 +3289,21 @@ export class PlayerPokemon extends Pokemon {
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 => {
this.resetTurnData();
if (!batonPass) {
this.resetSummonData();
}
this.hideInfo();
this.setVisible(false);
this.leaveField(!batonPass);
this.scene.ui.setMode(Mode.PARTY, PartyUiMode.FAINT_SWITCH, this.getFieldIndex(), (slotIndex: integer, option: PartyOption) => {
if (slotIndex >= this.scene.currentBattle.getBattlerCount() && slotIndex < 6) {
this.scene.prependToPhase(new SwitchSummonPhase(this.scene, this.getFieldIndex(), slotIndex, false, batonPass), MoveEndPhase);
}
if (removeFromField) {
this.setVisible(false);
this.scene.field.remove(this);
this.scene.triggerPokemonFormChange(this, SpeciesFormChangeActiveTrigger, true);
}
this.scene.ui.setMode(Mode.MESSAGE).then(() => resolve());
this.scene.ui.setMode(Mode.MESSAGE).then(resolve);
}, PartyUiHandler.FilterNonFainted);
});
}
@ -4075,6 +4120,7 @@ export class EnemyPokemon extends Pokemon {
this.pokeball = pokeballType;
this.metLevel = this.level;
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);
party.push(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.
let title = includeTitle && this.config.title ? this.config.title : null;
if (this.name === "" && name.toLowerCase().includes("grunt")) {
const evilTeamTitles = ["grunt", "admin", "sage"];
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
title = i18next.t(`trainerClasses:${name.toLowerCase().replace(/\s/g, "_")}`);
console.log("Localized grunt name: " + title);

View File

@ -35,12 +35,12 @@ export const abilityTriggers: SimpleTranslationEntries = {
"battlerTagImmunity": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert {{battlerTagName}}!",
"forewarn": "Vorwarnung von {{pokemonNameWithAffix}}: Konzentraion auf {{moveName}}!",
"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!",
"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!",
"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!",
"postBattleLoot": "{{pokemonNameWithAffix}} hebt {{itemName}} auf!",
"postFaintContactDamage": "{{abilityName}} von {{pokemonNameWithAffix}} schadet seinem Angreifer!",

View File

@ -5,7 +5,8 @@ export const bgmName: SimpleTranslationEntries = {
"missing_entries" : "{{name}}",
"battle_kanto_champion": "S2W2 Vs. Kanto 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_champion_alder": "SW Vs. Champion Lauro",
"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!"
},
},
"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": {
"encounter": {
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…"
},
},
"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": {
"encounter": {
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…",
},
},
"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": {
"encounter": {
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…"
},
},
"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": {
"encounter": {
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…"
},
},
"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": {
"encounter": {
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…"
},
},
"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": {
"encounter": {
1: `Ich bin beeindruckt, du hast es bis hierher geschafft!

View File

@ -3,16 +3,28 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const filterBar: SimpleTranslationEntries = {
"genFilter": "Gen.",
"typeFilter": "Typ",
"caughtFilter": "Gefangen",
"unlocksFilter": "Freisch.",
"winFilter": "Abschluss",
"miscFilter": "Sonst.",
"sortFilter": "Sort.",
"all": "Alle",
"normal": "Normal",
"uncaught": "Nicht gefangen",
"passive": "Passive",
"passiveUnlocked": "Passive freigeschaltet",
"passiveLocked": "Passive gesperrt",
"costReduction": "Cost Reduction",
"costReductionUnlocked": "Cost Reduction Unlocked",
"costReductionLocked": "Cost Reduction Locked",
"ribbon": "Band",
"hasWon": "Hat Klassik-Modus 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",
"sortByCost": "Kosten",
"sortByCandies": "Anzahl Bonbons",

View File

@ -35,7 +35,7 @@ export const moveTriggers: SimpleTranslationEntries = {
"isOverflowingWithSpacePower": "Kosmische Kräfte strömen aus {{pokemonName}}!",
"usedUpAllElectricity": "{{pokemonName}} braucht seinen Strom komplett auf!",
"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!",
"tookMoveAttack": "{{pokemonName}} wurde von {{moveName}} getroffen!",
"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}}!",
"tryingToTakeFoeDown": "{{pokemonName}} versucht, den Angreifer mit sich zu nehmen!",
"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;

View File

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

View File

@ -128,21 +128,32 @@ export const trainerClasses: SimpleTranslationEntries = {
"rocket_grunt": "Rüpel von Team Rocket",
"rocket_grunt_female": "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_female": "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_female": "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_female": "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_female": "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_female": "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;
// 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}}",
"battle_kanto_champion": "B2W2 Kanto 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_champion_alder": "BW 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!"
},
},
"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": {
"encounter": {
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?!"
},
},
"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": {
"encounter": {
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!"
},
},
"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": {
"encounter": {
1: "Don't mess with Team Galactic!"
@ -415,6 +451,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
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": {
"encounter": {
1: "We won't tolerate people who have different ideas!"
@ -423,6 +471,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
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": {
"encounter": {
1: "Fashion is most important to us!"
@ -431,6 +491,18 @@ export const PGMdialogue: DialogueTranslationEntries = {
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": {
"encounter": {
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 = {
"genFilter": "Gen",
"typeFilter": "Type",
"caughtFilter": "Caught",
"unlocksFilter": "Unlocks",
"winFilter": "Win",
"miscFilter": "Misc",
"sortFilter": "Sort",
"all": "All",
"normal": "Normal",
"uncaught": "Uncaught",
"passive": "Passive",
"passiveUnlocked": "Passive Unlocked",
"passiveLocked": "Passive Locked",
"hasWon": "Yes",
"hasNotWon": "No",
"costReduction": "Cost Reduction",
"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.",
"sortByCost": "Cost",
"sortByCandies": "Candy Count",

View File

@ -50,5 +50,13 @@ export const moveTriggers: SimpleTranslationEntries = {
"transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!",
"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;

View File

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

View File

@ -126,17 +126,34 @@ export const trainerClasses: SimpleTranslationEntries = {
"workers": "Workers",
"youngster": "Youngster",
"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",
"plasma_sage": "Plasma Sage",
"flare_grunt": "Flare Grunt",
"flare_grunt_female": "Flare Grunt",
"flare_grunts": "Flare Grunts",
"flare_admin": "Flare Admin",
"flare_admin_female": "Flare Admin",
} as const;
// 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}}",
"battle_kanto_champion": "B2W2 - ¡Vs Campeón de Kanto!",
"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_champion_alder": "BW - ¡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 = {
"genFilter": "Gen.",
"typeFilter": "Tipo",
"caughtFilter": "Caught",
"unlocksFilter": "Otros",
"winFilter": "Vic.",
"miscFilter": "Misc",
"sortFilter": "Orden",
"all": "Todo",
"normal": "Normal",
"uncaught": "No Capt.",
"passive": "Passive",
"passiveUnlocked": "Pasiva Desbloq.",
"passiveLocked": "Pasiva Bloq.",
"costReduction": "Cost Reduction",
"costReductionUnlocked": "Cost Reduction Unlocked",
"costReductionLocked": "Cost Reduction Locked",
"ribbon": "Ribbon",
"hasWon": "Ya 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.",
"sortByCost": "Coste",
"sortByCandies": "# Caramelos",

View File

@ -50,5 +50,13 @@ export const moveTriggers: SimpleTranslationEntries = {
"transformedIntoTarget": "{{pokemonName}} transformed\ninto {{targetName}}!",
"tryingToTakeFoeDown": "{{pokemonName}} is hoping to take its attacker down with it!",
"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;

View File

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

View File

@ -117,7 +117,35 @@ export const trainerClasses: SimpleTranslationEntries = {
"worker": "Operario",
"worker_female": "Operaria",
"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;
// Names of special trainers like gym leaders, elite four, and the champion

View File

@ -264,6 +264,10 @@ export const PGMachv: AchievementTranslationEntries = {
"MONO_FAIRY": {
name: "Hey ! Listen !",
},
"FRESH_START": {
name: "Du premier coup !",
description: "Terminer un challenge « Nouveau départ »."
}
} as const;
// 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": {
name: "Hey ! Listen !",
},
"FRESH_START": {
name: "Du premier coup !",
description: "Terminer un challenge « Nouveau départ »."
}
} as const;

View File

@ -5,7 +5,8 @@ export const bgmName: SimpleTranslationEntries = {
"missing_entries" : "{{name}}",
"battle_kanto_champion": "N2B2 - Vs. Maitre de Kanto",
"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_champion_alder": "NB - Vs. Maitre 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_strong": "NB - Vs. Pokémon puissant sauvage",
"end_summit": "PDM ÉSDX - Tour Céleste",
"battle_rocket_grunt": "HGSS Team Rocket Battle",
"battle_aqua_magma_grunt": "ORAS Team Aqua & Magma Battle",
"battle_galactic_grunt": "BDSP Team Galactic Battle",
"battle_rocket_grunt": "HGSS Vs. Team Rocket",
"battle_aqua_magma_grunt": "ROSA Vs. Team Aqua/Magma",
"battle_galactic_grunt": "DÉPS Vs. Team Galaxie",
"battle_plasma_grunt": "NB - Vs. Team Plasma",
"battle_flare_grunt": "XY Team Flare Battle",
"battle_rocket_boss": "USUM Giovanni Battle",
"battle_aqua_magma_boss": "ORAS Archie & Maxie Battle",
"battle_galactic_boss": "BDSP Cyrus Battle",
"battle_plasma_boss": "B2W2 Ghetsis Battle",
"battle_flare_boss": "XY Lysandre Battle",
"battle_flare_grunt": "XY - Vs. Team Flare",
"battle_rocket_boss": "USUL - Vs. Giovanni",
"battle_aqua_magma_boss": "ROSA - Vs. Max/Arthur",
"battle_galactic_boss": "DÉPS - Vs. Hélio",
"battle_plasma_boss": "N2B2 - Vs. Ghetis",
"battle_flare_boss": "XY - Vs. Lysandre",
// Biome Music
"abyss": "PDM EdS - Cratère Obscur",

View File

@ -2,7 +2,7 @@ import { TranslationEntries } from "#app/interfaces/locales";
export const challenges: TranslationEntries = {
"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": {
"name": "Mono-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é."
//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;

View File

@ -2898,6 +2898,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
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": {
"encounter": {
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 ?!"
},
},
"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": {
"encounter": {
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 ?"
},
},
"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": {
"encounter": {
1: "Ne te mets pas en travers de la Team Galaxie !"
@ -2922,6 +2958,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
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": {
"encounter": {
1: "Pas de quatiers à ceux qui ne suivent pas notre idéal !"
@ -2930,6 +2978,18 @@ export const PGFdialogue: DialogueTranslationEntries = {
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": {
"encounter": {
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."
},
},
"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": {
"encounter": {
1: "Bien. Je dois admettre que je suis impressionné de te voir ici !"

View File

@ -3,19 +3,31 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales";
export const filterBar: SimpleTranslationEntries = {
"genFilter": "Gen",
"typeFilter": "Type",
"unlocksFilter": "Autres",
"winFilter": "Victoires",
"caughtFilter": "Capturés",
"unlocksFilter": "Débloq.",
"miscFilter": "Divers",
"sortFilter": "Tri",
"all": "Tous",
"normal": "Normal",
"uncaught": "Non-capturé",
"passive": "Passif",
"passiveUnlocked": "Passif débloqué",
"passiveLocked": "Passif verrouillé",
"hasWon": "Oui",
"hasNotWon": "Aucune",
"costReduction": "Cost Reduction",
"costReductionUnlocked": "Cost Reduction Unlocked",
"costReductionLocked": "Cost Reduction Locked",
"ribbon": "Ruban",
"hasWon": "Ruban - Oui",
"hasNotWon": "Ruban - Non",
"hiddenAbility": "Hidden Ability",
"hasHiddenAbility": "Hidden Ability - Yes",
"noHiddenAbility": "Hidden Ability - No",
"pokerus": "Pokerus",
"hasPokerus": "Pokerus - Yes",
"noPokerus": "Pokerus - No",
"sortByNumber": "Par N°",
"sortByCost": "Par cout",
"sortByCandies": "Par # bonbons",
"sortByCandies": "Par bonbons",
"sortByIVs": "Par IV",
"sortByName": "Par nom",
};

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